我有一個問題,我找到了一個解決方案,但我覺得這是做錯的方法。 也許,有一個更「規範」的方式來做到這一點。熊貓(Python) - 從條件更新另一個數據框的列
問題
我有兩個數據框,我想,而無需額外的列,但不刪除現有的相關信息進行合併。例如:
現有數據幀(DF)
A A2 B
0 1 4 0
1 2 5 1
數據幀合併(DF2)
A A2 B
0 1 4 2
1 3 5 2
我想與df2
更新df
如果列 'A' 和 'A2' 對應。 其結果將是(:
A A2 B
0 1 4 2.0 <= Update value ONLY
1 2 5 1.0
這裏是我的解決方案,但我認爲這不是一個非常好的一個
import pandas as pd
df = pd.DataFrame([[1,4,0],[2,5,1]],columns=['A','A2','B'])
df2 = pd.DataFrame([[1,4,2],[3,5,2]],columns=['A','A2','B'])
df = df.merge(df2,on=['A', 'A2'],how='left')
df['B_y'].fillna(0, inplace=True)
df['B'] = df['B_x']+df['B_y']
df = df.drop(['B_x','B_y'], axis=1)
print(df)
有沒有人有一個更好的方式做 感謝
?!
簡單而優雅。謝謝 ! :) – Lerenn
嗨!我有兩個不同的DF(DF1和DF2),我面臨與此相同的問題。我試過這個解決方案,但得到以下錯誤:'ValueError:只能比較標識相同的DataFrame對象。兩個DF的大小都不相同,但重要的列標記相同。爲什麼我得到這個錯誤?我做了這個:'values =(df [[SITE_IP,PORT_NAME]] == dfLags [[SITE_IP,PORT_NAME]])。all(axis = 1)' –
除了列以外,行還有標籤存儲在索引。例如,用'df3 = df.copy(); df3.index = ['G','H']',比較'df [['A','A2']] == df3 [['A','A2']]'產生相同的錯誤。因此,即使具有相同的形狀,也不能進行有效的比較。也許有些廣播技巧可能會有幫助。 – Quickbeam2k1