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 添加一列

根据其他列向 Panda 数据框添加新列

根据多个条件将新列添加到 Python Pandas DataFrame [重复]

Pandas:根据另一列的键在现有列上映射字典值以替换 NaN

将 pandas Series 或 DataFrame 列插入现有 Excel 文件的第一个空列(使用 OpenPyXL?)