2024-04-24 13:09:14 发布
网友
我用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
如果两个数据帧中的长度和索引值相同,并且用^{}比较两列,我认为需要^{}:
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中的唯一行通过列a和b通过^{}进行匹配,最后一个^{}并删除不必要的列d_:
a
b
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
如果两个数据帧中的长度和索引值相同,并且用^{} 比较两列,我认为需要^{} :
另一个更通用的解决方案是通过^{} 与left join进行匹配,但必须使用} 进行匹配,最后一个^{} 并删除不必要的列
df2
中的唯一行通过列a
和b
通过^{d_
:相关问题 更多 >
编程相关推荐