繁体   English   中英

熊猫-合并多列和总和

[英]Pandas - Merge multiple columns and sum

我有一个像这样的主要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

通过intersection仅使用具有相同列的add

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

如果仅使用addadd不匹配的整数列转换为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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM