簡體   English   中英

Pandas(Python) - 從條件更新另一個數據框的列

[英]Pandas (Python) - Update column of a dataframe from another one with conditions

我有一個問題,我找到了一個解決方案,但我覺得這是錯誤的方法。 也許,有一種更“規范”的方式來做到這一點。

問題

我有兩個數據框,我想合並,沒有額外的列,也沒有刪除現有的信息。 示例:

現有數據幀(df)

   A  A2  B
0  1   4  0
1  2   5  1

要合並的數據幀(df2)

   A  A2  B
0  1   4  2
1  3   5  2

如果列'A'和'A2'對應,我想用df2更新df 結果將是(:

   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)

有沒有人有更好的方法呢? 謝謝 !

是的,它可以在沒有合並的情況下完成:

rows = (df[['A','A2']] == df2[['A','A2']]).all(axis=1)
df.loc[rows,'B'] = df2.loc[rows,'B']

你可以試試這個:

df.ix[df2.loc[(df['A'] == df2['A']) & (df['A2'] ==   
df2['A2']),'B'].index.values,'B'] = \
df2.loc[(df['A'] == df2['A']) & (df['A2'] == df2['A2']),'B']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM