我有一个20 x 4000的数据帧在Python中使用熊猫。其中两列分别命名为Year和quarter。我想创建一个名为period的变量,使Year = 2000, quarter= q2变为2000q2。
有人能帮忙吗?
我有一个20 x 4000的数据帧在Python中使用熊猫。其中两列分别命名为Year和quarter。我想创建一个名为period的变量,使Year = 2000, quarter= q2变为2000q2。
有人能帮忙吗?
当前回答
可以使用DataFrame的assign方法:
df= (pd.DataFrame({'Year': ['2014', '2015'], 'quarter': ['q1', 'q2']}).
assign(period=lambda x: x.Year+x.quarter ))
其他回答
使用.combine_first。
df['Period'] = df['Year'].combine_first(df['Quarter'])
泛化到多个列,为什么不呢:
columns = ['whatever', 'columns', 'you', 'choose']
df['period'] = df[columns].astype(str).sum(axis=1)
当使用加法运算符+将列与字符串连接起来时,如果其中任何一个是NaN,则整个输出将是NaN,因此使用fillna()
df["join"] = "some" + df["col"].fillna(df["val_if_nan"])
如果两个列都是字符串,你可以直接连接它们:
df["period"] = df["Year"] + df["quarter"]
如果一个(或两个)列不是字符串类型的,你应该先转换它(它们),
df["period"] = df["Year"].astype(str) + df["quarter"]
这样做时要当心nan !
如果你需要连接多个字符串列,你可以使用agg:
df['period'] = df[['Year', 'quarter', ...]].agg('-'.join, axis=1)
其中“-”是分隔符。
让我们假设你的数据框架是df,列是Year和Quarter。
import pandas as pd
df = pd.DataFrame({'Quarter':'q1 q2 q3 q4'.split(), 'Year':'2000'})
假设我们想要查看数据框架;
df
>>> Quarter Year
0 q1 2000
1 q2 2000
2 q3 2000
3 q4 2000
最后,将年度和季度连接起来,如下所示。
df['Period'] = df['Year'] + ' ' + df['Quarter']
现在可以打印df来查看结果的数据框架。
df
>>> Quarter Year Period
0 q1 2000 2000 q1
1 q2 2000 2000 q2
2 q3 2000 2000 q3
3 q4 2000 2000 q4
如果你不想要年和季度之间的空间,只需删除它做;
df['Period'] = df['Year'] + df['Quarter']