簡體   English   中英

有沒有辦法通過忽略 python 中的 NAN 值來執行滯后/超前操作?

[英]Is there a way to perform lag/lead operations by ignoring NAN values in python?

我有一個數據集,其中包括日期、客戶和值(事件的大小)列。 我想創建一個名為“last_occurance_date”的新列,這是每個客戶最后一次發生事件的時間。 我有一個所有客戶和日期的交叉表,所以我有很多 null 值,這意味着該客戶在該日期沒有發生該事件。

我嘗試使用帶有 shift function 的 group by,但我無法忽略未發生事件的 null 值。

過濾掉 null 值 -> 沒有空值的滯后 -> 與表連接 -> ffill 有效,但有沒有簡單的方法來解決這個問題?

假設你有這個 DataFrame:

日期 顧客 價值
1 啊啊啊 10
2 啊啊啊 不適用
3 啊啊啊 20
4 啊啊啊 不適用
5 啊啊啊 50
1 bbb 不適用
2 bbb 不適用
3 bbb 30
4 bbb 不適用
5 bbb 50

Output Dataframe 應該如下所示:

日期 顧客 價值 上次發生日期
1 啊啊啊 10 不適用
2 啊啊啊 不適用 1
3 啊啊啊 20 1
4 啊啊啊 不適用 3
5 啊啊啊 50 3
1 bbb 不適用 不適用
2 bbb 不適用 不適用
3 bbb 30 不適用
4 bbb 不適用 3
5 bbb 50 3

您可以在掩碼日期上使用自定義groupby操作:

df['Last Occurrence Date'] = (df['Date'].mask(df['Value'].isna())
                             .groupby(df['Customer'])
                              .apply(lambda g: g.ffill().shift())
                             )

output:

   Date Customer  Value  Last Occurrence Date
0     1      aaa   10.0                   NaN
1     2      aaa    NaN                   1.0
2     3      aaa   20.0                   1.0
3     4      aaa    NaN                   3.0
4     5      aaa   50.0                   3.0
5     1      bbb    NaN                   NaN
6     2      bbb    NaN                   NaN
7     3      bbb   30.0                   NaN
8     4      bbb    NaN                   3.0
9     5      bbb   50.0                   3.0

暫無
暫無

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

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