簡體   English   中英

計算pandas Dataframe中不同行的單元格之間的差異

[英]Calculate difference between cells in different rows in a pandas Dataframe

我在熊貓中有一個像這樣的數據框:

       Timestamp   ID      X X Diff       Y Y Diff
0              0  100  1.728   None  14.378   None
1             12  100  2.035   None  14.378   None
2             24  100  2.342   None  14.378   None
3             36  100  2.630   None  14.378   None
4             48  100  2.937   None  14.416   None

我想要做的是計算行中 X 和 Y 值之間的差異,將結果添加到 X Diff 和 Y Diff 各自的列中以獲得這樣的結果。

    Timestamp   ID      X X Diff       Y Y Diff
0           0  100  1.728   None  14.378   None
1          12  100  2.035  0.307  14.378      0
2          24  100  2.342  0.307  14.378      0
3          36  100  2.630  0.288  14.378      0
4          48  100  2.937  0.307  14.416  0.038

計算應該只在行和它的前驅具有相同的 ID 時發生(如果前驅為空 - 第一行 - 或具有不同的 ID,默認為“無”)。

我創建了一個函數,通過一個基本的 for 循環來為屬於同一 ID 的所有條目執行此操作:

def getDifferences(dataframe, column):
    for i in range(19):
        startValue = dataframe.iloc[i][column]
        endValue = dataframe.iloc[i+1][column]
    
        diff = endValue - startValue
        if column == "X":
            dataframe.at[i+1, "X Diff"] = diff
        else:
            dataframe.at[i+1, "Y Diff"] = diff

由於數據被清理,並且完整數據幀總是有 20 個相同 ID 的條目,然后是另一個 ID 的其他 20 個條目,我可以在整個數據幀上創建第二個循環,將這 20 個所屬條目隔離到一個新的數據幀中,使用以上方法並重復。

但是,考慮到我的數據幀總共包含超過 10 萬行,我相信這種雙 for 循環到目前為止並不是最有效的方法。

我嘗試在網上搜索,但沒有找到內置的 Pandas 函數來實現更優雅的解決方案,而不是上述蠻力。

也許這里有人可以幫助我。 也許有一種麻木的方法可以做到這一點我看不到?

Groupby 'ID' 並計算差異,然后分配回 df:

df[['X diff','Y Diff']]=df.groupby('ID')[['X','Y']].diff()

df輸出:

  Timestamp     ID      X        Y      X diff  Y Diff
0   0           100     1.728   14.378  NaN     NaN
1   12          100     2.035   14.378  0.307   0.000
2   24          100     2.342   14.378  0.307   0.000
3   36          100     2.630   14.378  0.288   0.000
4   48          100     2.937   14.416  0.307   0.038

暫無
暫無

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

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