簡體   English   中英

更改 DataFrame 中的值,其中相同的值滿足一個條件,而前一個值滿足另一個條件

[英]Changing a value in DataFrame where the same value met a condition and the previous value meets another condition

我正在嘗試創建一個列,如果同一列中的前一個值滿足條件,則該值必須成為前一個值。 例如...

PREVIOUS col | CORRECT col
HW              HW
HW              HW
RF              RF
FW              FW
FW              FW
FWRF            FW
FW              FW 

如您所見,如果 PREVIOUS col 值為 == 'FW',則 'FWRF' 已更改為 'FW'。 我試圖讓 [CORRECT col] 工作,但我遇到了問題。

這是我迄今為止嘗試過的無濟於事...

df['CORRECT col'] = df.loc[df['PREVIOUS col'].shift(-1) == 'FWRF', 'PREVIOUS col']

我還嘗試創建“if”語句以使其工作,這甚至更糟......但我仍在學習如何盡可能有效地使用熊貓。 對你的幫助表示感謝。

根據您的描述,有兩種可能:

任何一個

  1. 您只需要檢查以前的值是FW即可將當前值也更改為FW

或者

  1. 您還需要檢查當前值是否為FWRF以及先前值是否為FW以將當前值更改為FW

對於情況 1,您可以使用.mask().shift() ,如下所示:

df['CORRECT col'] = df['PREVIOUS col'].mask(df['PREVIOUS col'].shift() == 'FW', 'FW')

在這里,我們使用.shift()獲取PREVIOUS col的前一行值並檢查它是否為FW ,如果是,我們使用.mask()將當前行值也更改為FW (如果條件為 False,我們保留原始值)。

結果:

print(df)

  PREVIOUS col CORRECT col
0           HW          HW
1           HW          HW
2           RF          RF
3           FW          FW
4           FW          FW
5         FWRF          FW
6           FW          FW

對於您還想檢查當前行值是FWRF情況 2,您可以稍微更改以添加檢查,如下所示:

df['CORRECT col'] = df['PREVIOUS col'].mask((df['PREVIOUS col'] == 'FWRF') & (df['PREVIOUS col'].shift() == 'FW'), 'FW')

在這里,我們添加了檢查(df['PREVIOUS col'] == 'FWRF')並使用& (and) 和條件(df['PREVIOUS col'].shift() == 'FW')這樣只有當兩個條件都為真時,我們更改值。

示例數據的結果相同,但查看您的真實數據是否需要檢查一種條件或兩種條件才能發揮最佳效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM