为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯6054654 2021-06-02 13:12:41
我有两个数据框 df 和 df1。主要数据帧如下:DF:    start   end price0   A   Z   11   B   Y   22   C   X   33   A   Z   44   D   W   5第二个数据帧:DF1:start   end price    0   A   Z   100    1   B   Y   200我希望主数据框 df 根据 df1 中的开始和结束更新“价格”列中的值。它应该更新与 df1 具有相同开始和结束的所有行的列值。DF:start   end price0   A   Z   1001   B   Y   2002   C   X   33   A   Z   1004   D   W   5(df 中的所有 AZ 和 BY 都应该更新)。无论如何我可以得到这个输出吗?实际上,数据框有更多列,但我只想更新一列(例如“价格”)。
查看完整描述

3 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

使用 update


df=df.set_index(['start','end'])

df.update(df1.set_index(['start','end']))

df.reset_index()

Out[99]: 

  start end  price

0     A   Z  100.0

1     B   Y  200.0

2     C   X    3.0

3     A   Z  100.0

4     D   W    5.0


查看完整回答
反对 回复 2021-06-22
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

首先,您可以合并:


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  price

0     A   Z  100.0

1     B   Y  200.0

2     C   X    3.0

3     A   Z  100.0

4     D   W    5.0


查看完整回答
反对 回复 2021-06-22
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

merge

df.drop('price', 1).merge(df1, 'left').fillna(df)


  start end  price

0     A   Z  100.0

1     B   Y  200.0

2     C   X    3.0

3     A   Z  100.0

4     D   W    5.0

  1. 我要合并,['start', 'end']而那个讨厌price的人会妨碍我。所以,我放弃了。

  2. 我需要保存df索引,因为我有那重复'A''Z'。所以,我使用一个'left' merge

  3. 现在我丢失的元素可以用 df


查看完整回答
反对 回复 2021-06-22
  • 3 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信