python - 计算熊猫数据框中不同行中单元格之间的差异
问题描述
我在熊猫中有一个这样的数据框:
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 个属于的条目隔离到一个新的数据帧中,使用上述方法并重复。
但是,考虑到我的数据帧总共包含超过 100k 行,我被引导相信这个双 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
推荐阅读
- oracle - How to run Hang Analyze Report in Oracle database
- node.js - Download file from GCF function
- laravel - How to extend existing token expire time for Laravel JWT
- c++ - How to set cmake option with ninja without calling vcvarsall.bat to compile x86 and x64 each of parent and child project?
- asp.net - How to know what exactly who/where process run queries in SQL server
- python - Tensorflow how do I reshape array of images properly for model prediction input
- laravel - "GET method is not supported for this route" even though it's a POST route
- if-statement - 位操作的 Codesys IF 语句错误
- javascript - How To convert UTC into local time on the web with javascript? from http://openweathermap.org/
- java - 在 java 中,使用 Runtime Exception 作为函数调用的超级“突破”是不好的做法吗?