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

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

如何從 pandas 數據框中的當前行中減去前一行以創建一個新列以每個名稱重新啟動進程?

如何從 pandas 數據框中的當前行中減去前一行以創建一個新列以每個名稱重新啟動進程?

慕蓋茨4494581 2023-03-01 16:35:41
我有一個包含 3 列的數據框,其中第一列是帶有人名的分類變量,第二列是日期,第三列是問題的累積出現次數。我想生成一個新列,其中包含每個人每天發生的事件。**Name     Date          Cumulative**John     01-01-2020    0John     02-01-2020    5John     03-01-2020    10John     04-01-2020    12Peter    01-01-2020    0Peter    02-01-2020    3Peter    03-01-2020    7Peter    04-01-2020    10James    01-01-2020    0James    02-01-2020    10James    03-01-2020    14James    04-01-2020    18Kirk     01-01-2020    0Kirk     02-01-2020    12Kirk     03-01-2020    12Kirk     04-01-2020    15Rob      01-01-2020    0Rob      02-01-2020    11Rob      03-01-2020    18Rob      04-01-2020    23如果我使用 df['By Day'] = df.Cumulative.diff() 結果很好但是在每個人第一次出現時它會給我負數而不是 0(因為它將前一個數字減去 0 ). 它會給我如下:Name     Date          Cumulative  By DayJohn     01-01-2020    0           0John     01-02-2020    0           0John     03-01-2020    5           5John     04-01-2020    10          5John     05-01-2020    12          2Peter    01-01-2020    0           -12Peter    02-01-2020    0           0Peter    03-01-2020    3           3Peter    04-01-2020    7           4Peter    04-01-2020    10          3James    01-01-2020    0           -10James    02-01-2020    0           0James    03-01-2020    10          10James    04-01-2020    14          4James    04-01-2020    18          4 Kirk     01-01-2020    0           -18Kirk     02-01-2020    0           0Kirk     03-01-2020    12          12Kirk     04-01-2020    15          3Kirk     04-01-2020    19          4Rob      01-01-2020    5           -14Rob      02-01-2020    11          6Rob      03-01-2020    18          7Rob      04-01-2020    23          5Rob      04-01-2020    27          4我想對每個名字進行區分,以便每次不同的人都從 0 開始。我考慮過按名稱使用迭代,但它會為每個條目執行 5 次。例如,對于 Rob,我想要 0 6 7 5 4 而不是從 -14 開始(Kirk 的前 19 -5 來自 Rob 的第一個條目)
查看完整描述

1 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

您應該首先在該列上使用groupby函數Name以分別對每個人應用該diff函數。然后你可以使用0fillna(0)替換NaN值(將存在于每個人的第一行):

df["By Day"] = df.groupby("Name").Comulative.diff().fillna(0)


查看完整回答
反對 回復 2023-03-01
  • 1 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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