猿问

根据另一个数据帧中的值从数据帧中选择行,并根据第二个数据帧用值更新其中一列

我有两个数据框 df 和 df1。


主要数据帧如下:

DF:


    start   end price

0   A   Z   1

1   B   Y   2

2   C   X   3

3   A   Z   4

4   D   W   5

第二个数据帧:

DF1:


start   end price

    0   A   Z   100

    1   B   Y   200

我希望主数据框 df 根据 df1 中的开始和结束更新“价格”列中的值。它应该更新与 df1 具有相同开始和结束的所有行的列值。DF:


start   end price

0   A   Z   100

1   B   Y   200

2   C   X   3

3   A   Z   100

4   D   W   5

(df 中的所有 AZ 和 BY 都应该更新)。无论如何我可以得到这个输出吗?实际上,数据框有更多列,但我只想更新一列(例如“价格”)。


幕布斯6054654
浏览 141回答 3
3回答

哔哔one

使用 updatedf=df.set_index(['start','end'])df.update(df1.set_index(['start','end']))df.reset_index()Out[99]:   start end  price0     A   Z  100.01     B   Y  200.02     C   X    3.03     A   Z  100.04     D   W    5.0

慕的地6264312

首先,您可以合并:s = df1.merge(df2, left_on=['start', 'end'], right_on=['start', 'end'], how='left')然后你可以fillna索引你想要的列:s.assign(price=s.price_y.fillna(s.price_x))[['start', 'end', 'price']]  start end  price0     A   Z  100.01     B   Y  200.02     C   X    3.03     A   Z  100.04     D   W    5.0

慕尼黑的夜晚无繁华

mergedf.drop('price', 1).merge(df1, 'left').fillna(df)  start end  price0     A   Z  100.01     B   Y  200.02     C   X    3.03     A   Z  100.04     D   W    5.0我要合并,['start', 'end']而那个讨厌price的人会妨碍我。所以,我放弃了。我需要保存df索引,因为我有那重复'A'和'Z'。所以,我使用一个'left' merge现在我丢失的元素可以用 df
随时随地看视频慕课网APP

相关分类

Python
我要回答