簡體   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