繁体   English   中英

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

[英]Select rows from a DataFrame based on a values in another dataframe and updating one of the column with values according to the second DataFrame

我有两个数据帧df和df1。

主DataFrame如下:
DF:

    start   end price
0   A   Z   1
1   B   Y   2
2   C   X   3
3   A   Z   4
4   D   W   5

第二个DataFrame:
DF1:

start   end price
    0   A   Z   100
    1   B   Y   200

我希望主数据帧df根据df1中的开头和结尾更新'price'列中的值。 它应该更新具有与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都应该更新)。 无论如何我能得到这个输出吗? 实际上,数据帧有更多列,但我想只更新一列(例如''价格')。

首先,您可以合并:

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

使用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

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填充

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM