首页 > 解决方案 > Python/Pandas Dataframe - 根据标识符计算数据框中两个相距较远的行的差异

问题描述

我正在处理 python 中的数据框(主要是 pandas 和 numpy)。下面给出示例。

        Name   ID   Guess  Date  Topic                       Delta
    0    a     23    5     2019    1    (Person A's Guess in 2019 - Guess in 2018)
    1    a     23    8     2018    1
    2    c     7     7     2019    1    (Person C's Guess in 2019 - Guess in 2018)
    3    c     7     4     2018    1
    4    e     12    9     2018    1
    5    a     23    3     2020    2

我想填充空列Delta,这只是同一主题的最后一次猜测和现在更新的猜测之间的差异。我遇到了麻烦,因为我需要保留主题和此人的 ID。

数据集相当大(> 1mio.条目),这就是为什么我的迭代它的方法在使用完整数据帧时确实会造成麻烦。

我以上述方式对数据框进行了排序,以便尝试使用 .shift(); 解决它 但是我想必须有一个解决方案而不对 df 进行排序,因为我有足够的标识符(ID、Date、Topic)。

for i in df.index:
    if df['ID'].iloc[i] == test['ID'].iloc[i+1]:
        df['Delta'].iloc[i+1] = df['Guess'].iloc[i+1] - test['Guess'].iloc[i]
    else:
         df['Delta'].iloc[i+1] = "NaN"

如果有人知道该问题的更有效(可能是矢量化)解决方案,我将不胜感激提示和帮助

标签: pythonpandasdataframediff

解决方案


推荐阅读