[英]How to subtract previous row from current row in a pandas dataframe to create a new column restarting the process with each name?
我有一個 dataframe 有 3 列,其中第一列是帶有人名的分類變量,第二列是日期,第三列是問題的累積發生率。 我想生成一個新列,其中包含每人每天的出現次數。
**Name Date Cumulative**
John 01-01-2020 0
John 02-01-2020 5
John 03-01-2020 10
John 04-01-2020 12
Peter 01-01-2020 0
Peter 02-01-2020 3
Peter 03-01-2020 7
Peter 04-01-2020 10
James 01-01-2020 0
James 02-01-2020 10
James 03-01-2020 14
James 04-01-2020 18
Kirk 01-01-2020 0
Kirk 02-01-2020 12
Kirk 03-01-2020 12
Kirk 04-01-2020 15
Rob 01-01-2020 0
Rob 02-01-2020 11
Rob 03-01-2020 18
Rob 04-01-2020 23
如果我使用 df['By Day'] = df.Cumulative.diff() 結果很好,但在每個人的第一次出現時,它會給我負數而不是 0(因為它將前一個數字減去 0 )。 它會給我如下:
Name Date Cumulative By Day
John 01-01-2020 0 0
John 01-02-2020 0 0
John 03-01-2020 5 5
John 04-01-2020 10 5
John 05-01-2020 12 2
Peter 01-01-2020 0 -12
Peter 02-01-2020 0 0
Peter 03-01-2020 3 3
Peter 04-01-2020 7 4
Peter 04-01-2020 10 3
James 01-01-2020 0 -10
James 02-01-2020 0 0
James 03-01-2020 10 10
James 04-01-2020 14 4
James 04-01-2020 18 4
Kirk 01-01-2020 0 -18
Kirk 02-01-2020 0 0
Kirk 03-01-2020 12 12
Kirk 04-01-2020 15 3
Kirk 04-01-2020 19 4
Rob 01-01-2020 5 -14
Rob 02-01-2020 11 6
Rob 03-01-2020 18 7
Rob 04-01-2020 23 5
Rob 04-01-2020 27 4
我想按每個名字做差異,以便每次人不一樣時它都從 0 開始。 我曾考慮過按名稱使用迭代,但它會為每個條目執行 5 次。 例如,對於 Rob,我想要 0 6 7 5 4 而不是以 -14 開頭(來自 Kirk 的前 19 -5 來自 Rob 的第一個條目)
您應該首先在Name
列上使用groupby
function 以分別對每個人應用diff
function。 然后您可以使用fillna(0)
將NaN
值(將存在於每個人的第一行中)替換為 0:
df["By Day"] = df.groupby("Name").Comulative.diff().fillna(0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.