熊猫-合并多列和总和

时间:2018-07-03 07:09:32

标签: python pandas

我有一个主df,如下所示:

index   A  B  C
5       1  5  8
6       2  4  1
7       8  3  4
8       3  9  5

和我想添加到主df的辅助df2,如下所示:

index   A  B  
5       4  2 
6       4  3 
7       7  1 
8       6  2 

A和B列的名称相同,但是主df包含许多列,而辅助df2不包含。我想对常见的列求和,而其他列保持不变。

输出:

index   A  B  C
5       5  7  8
6       6  7  1
7       15 4  4
8       9  11 5

尝试了df.joinpd.mergegroupby的变体,但暂时没有运气。

最后一次尝试:

df.groupby('index').sum().add(df2.groupby('index').sum())

但这不会保留公共列。

pd.merge我后缀为_x_y

2 个答案:

答案 0 :(得分:2)

add仅与intersection中相同的列一起使用:

c = df.columns.intersection(df2.columns)
df[c] = df[c].add(df2[c], fill_value=0)
print (df)
        A   B  C
index           
5       5   7  8
6       6   7  1
7      15   4  4
8       9  11  5

如果仅使用add,则不匹配的整数列将转换为float

df = df.add(df2, fill_value=0)
print (df)
        A   B    C
index             
5       5   7  8.0
6       6   7  1.0
7      15   4  4.0
8       9  11  5.0

编辑:

如果可能的话,请在公共列中输入

print (df)
       A  B  C  D
index            
5      1  5  8  a
6      2  4  1  e
7      8  3  4  r
8      3  9  5  w
print (df2)
       A  B  C  D
index            
5      1  5  8  a
6      2  4  1  e
7      8  3  4  r
8      3  9  5  w

解决方案类似,仅按select_dtypes过滤第一个数字列:

c = df.select_dtypes(np.number).columns.intersection(df2.select_dtypes(np.number).columns)
df[c] = df[c].add(df2[c], fill_value=0)
print (df)
        A   B  C  D
index              
5       5   7  8  a
6       6   7  1  e
7      15   4  4  r
8       9  11  5  w

答案 1 :(得分:0)

不是最干净的方法,但它可能会起作用。

df_new = pd.DataFrame()
df_new['A'] = df['A'] + df2['A']
df_new['B'] = df['B'] + df2['B']
df_new['C'] = df['C']


print(df_new)

    A   B  C
0   5   7  8
1   6   7  1
2  15   4  4
3   9  11  5
相关问题