[英]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.