亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據另一個數據幀中的值從數據幀中選擇行,并根據第二個數據幀用值更新其中一列

根據另一個數據幀中的值從數據幀中選擇行,并根據第二個數據幀用值更新其中一列

幕布斯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 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號