![](/img/trans.png)
[英]Is there any way to add column name in all the row of a dataframe based on a specific condition in pandas?
[英]add a column to pandas dataframe based on row name, if row doesnt exist add it in
我有以下数据框,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'], ['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
知道如何解决这个问题吗? 谢谢
使用DataFrame.merge
将数据帧df1
, df2
和df3
外部合并,然后使用letter
DataFrame.fillna
NaN
值:
df = (
df1.merge(df2, on='letter', how='outer')
.merge(df3, on='letter', how='outer').fillna('')
)
或者,如果有大量需要合并的数据帧,我们可以使用reduce
+ pd.merge
使用更简洁的解决方案,并将需要合并的数据帧列表传递给reduce
function:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.