[英]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.