簡體   English   中英

Python使用另一個表的值更新表的值

[英]Python update table's value using another table's values

我使用python和pandas。

我想做一個[df_result]。 df1和df2的a,b是條件。 如果a,b是相等的值,則將df1的“ d”列值更改為df2的“ d”列值。

怎么做? 我不知道任何解決方案。

DF1

a b c d

1 2 5 1

1 5 5 1

2 3 4 1

DF2

a b d

1 2 2

1 2 2

2 3 4

df_result

a b c d

1 2 5 2

1 5 5 1

2 3 4 4

我認為你需要numpy.where如果相同的長度和相同的指數值與兩列用比較兩個DataFrames DataFrame.all

df1['d'] = np.where((df1[['a', 'b']] == df2[['a', 'b']]).all(axis=1), df2['d'], df1['d'])
print (df1)
   a  b  c  d
0  1  2  5  2
1  1  5  5  1
2  2  3  4  4

print (df1[['a', 'b']] == df2[['a', 'b']])
      a      b
0  True   True
1  True  False
2  True   True

print ((df1[['a', 'b']] == df2[['a', 'b']]).all(axis=1))
0     True
1    False
2     True
dtype: bool

另一個更通用的通過左連接merge進行匹配的解決方案,但是在df2必需的唯一行由a列和b列由drop_duplicates ,last combine_first和刪除不必要的d_列組成:

df = (df1.merge(df2.drop_duplicates(['a','b']), on=['a','b'], how='left', suffixes=('_',''))
         .assign(d= lambda x: x['d'].combine_first(x['d_']))
         .drop('d_', axis=1))

print (df)
   a  b  c    d
0  1  2  5  2.0
1  1  5  5  1.0
2  2  3  4  4.0

print (df2.drop_duplicates(['a','b']))
   a  b  d
0  1  2  2
2  2  3  4

print (df1.merge(df2.drop_duplicates(['a','b']), on=['a','b'], how='left', suffixes=('_','')))
   a  b  c  d_    d
0  1  2  5   1  2.0
1  1  5  5   1  NaN
2  2  3  4   1  4.0

暫無
暫無

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

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