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

2024-04-24 13:09:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python和熊猫。你知道吗

我想做一个类似于[df d u 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

数据框结果

a b c d

1 2 5 2

1 5 5 1

2 3 4 4

Tags: 数据dfresult条件df1df2列值解决办法
1条回答
网友
1楼 · 发布于 2024-04-24 13:09:14

如果两个数据帧中的长度和索引值相同,并且用^{}比较两列,我认为需要^{}

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

另一个更通用的解决方案是通过^{}与left join进行匹配,但必须使用df2中的唯一行通过列ab通过^{}进行匹配,最后一个^{}并删除不必要的列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

相关问题 更多 >