Pandas:根据现有列向DataFrame添加列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas:根据现有列向DataFrame添加列相关的知识,希望对你有一定的参考价值。
我有2个pandas DataFrames,我在Python中操作,我想基于某个列(col_1)组合它们:
#df1
col_1 col_2
0 3 7
1 4 8
2 5 5
#df2
col_1 col_3
0 4 78
1 5 89
输出应如下所示:
col_1 col_2 col_3
0 3 7 0
1 4 8 78
2 5 5 89
我不确定如何使用“最佳实践”来解决这个问题。
谢谢。
答案
假设你有:
df1=pd.DataFrame({'col_1': {0: 3, 1: 4, 2: 5}, 'col_2': {0: 7, 1: 8, 2: 5}})
df2=pd.DataFrame({'col_1': {0: 4, 1: 5}, 'col_3': {0: 78, 1: 89}})
您可以使用合并:
pd.merge(df1,df2,on='col_1',how='left').fillna(0)
Out[22]:
col_1 col_2 col_3
0 3 7 0.0
1 4 8 78.0
2 5 5 89.0
如果你需要col_3作为int(感谢piRSquared他的建议):
pd.merge(df1,df2,on='col_1',how='left').fillna(0, downcast='infer')
Out[25]:
col_1 col_2 col_3
0 3 7 0
1 4 8 78
2 5 5 89
另一答案
使用join
后可以使用set_index
。
df1.join(df2.set_index('col_1'), on='col_1').fillna(0, downcast='infer')
col_1 col_2 col_3
0 3 7 0
1 4 8 78
2 5 5 89
另一答案
如果对于单个列通常有效,则映射系列。
df1 = pd.DataFrame({'col_1': [3, 4, 5],
'col_2': [7, 8, 5]})
df2 = pd.DataFrame({'col_1': [4, 5],
'col_3': [78, 89]})
df1['col_3'] = df1['col_1'].map(df2.set_index('col_1')['col_3']).fillna(0)
# col_1 col_2 col_3
# 0 3 7 0.0
# 1 4 8 78.0
# 2 5 5 89.0
另一答案
也许combine_first
df1.set_index('col_1').combine_first(df2.set_index('col_1')).fillna(0).reset_index().astype(int)
Out[237]:
col_1 col_2 col_3
0 3 7 0
1 4 8 78
2 5 5 89
以上是关于Pandas:根据现有列向DataFrame添加列的主要内容,如果未能解决你的问题,请参考以下文章
当列是现有列的布尔测试时,为啥向 Pandas DataFrame 添加列会返回 SettingWithCopy 警告?
PySpark 从 TimeStampType 列向 DataFrame 添加一列
根据多个条件将新列添加到 Python Pandas DataFrame [重复]
Pandas:根据另一列的键在现有列上映射字典值以替换 NaN
将 pandas Series 或 DataFrame 列插入现有 Excel 文件的第一个空列(使用 OpenPyXL?)