[英]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.join
, pd.merge
和groupby
变体,但目前没有运气。
最后一次尝试:
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
如果仅使用add
, 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
不是最干净的方法,但它可能会起作用。
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.