Python 根据行名称向dataframe添加列,如果行不存在,则将其添加到
我有以下数据帧,其中df1是我的主帧Python 根据行名称向dataframe添加列,如果行不存在,则将其添加到,python,pandas,dataframe,append,concat,Python,Pandas,Dataframe,Append,Concat,我有以下数据帧,其中df1是我的主帧 df1 = pd.DataFrame([['a', '10'], ['b', '20']], columns=['letter', 'Jan']) df2 = pd.DataFrame([['a', '1'], ['b', '2'], ['c', '2']], columns=['letter', 'feb']) df3 = pd.DataFrame([['a', '10'], ['b', '20'
df1 = pd.DataFrame([['a', '10'], ['b', '20']],
columns=['letter', 'Jan'])
df2 = pd.DataFrame([['a', '1'], ['b', '2'], ['c', '2']],
columns=['letter', 'feb'])
df3 = pd.DataFrame([['a', '10'], ['b', '20'], ['c', '20'], ['d', '20']],
columns=['letter', 'march'])
如何将df2和df3添加到df1中,使其看起来如下所示
Letter jan feb march
0 a 10 1 10
1 b 20 2 20
2 c 2 20
3 d 20
res = pd.concat([df1, df2,df3])
我厌倦了这封信,信里不断地加上我不想写的东西
letter Jan feb march
0 a 10 NaN NaN
1 b 20 NaN NaN
0 a NaN 1 NaN
1 b NaN 2 NaN
2 c NaN 2 NaN
0 a NaN NaN 10
1 b NaN NaN 20
2 c NaN NaN 20
3 d NaN NaN 20
你知道我怎样才能解决这个问题吗?
感谢在字母上使用外部合并数据帧df1
、df2
和df3
,然后使用填充NaN
值:
df = (
df1.merge(df2, on='letter', how='outer')
.merge(df3, on='letter', how='outer').fillna('')
)
或者,如果有大量需要合并的数据帧,我们可以使用+使用更简洁的解决方案,并将需要合并的数据帧列表传递给reduce
函数:
from functools import reduce
df = reduce(lambda x, y:
pd.merge(x, y, on='letter', how='outer'), [df1, df2, df3]).fillna('')
结果:
# print(df)
letter Jan feb march
0 a 10 1 10
1 b 20 2 20
2 c 2 20
3 d 20
这是你问题的解决办法
df_outer = pd.merge(df1, df2, on='letter', how='outer')
df_outer = pd.merge(df_outer, df3, on='letter', how='outer')
df_outer = df_outer.fillna('')
df_outer