[英]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”語句以使其工作,這甚至更糟......但我仍在學習如何盡可能有效地使用熊貓。 對你的幫助表示感謝。
根據您的描述,有兩種可能:
任何一個
FW
即可將當前值也更改為FW
,或者
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.