![](/img/trans.png)
[英]update the field value(s) with the dynamic values in solr using 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.