如何根据基于行的计算将新列附加到我的 Pandas DataFrame?

How to append a new column to my Pandas DataFrame based on a row-based calculation?

假设我有一个包含两列的 Pandas DataFrame:1) user_id, 2) 步数(其中包含给定日期的步数)。现在我想计算步数与之前测量中的步数之间的差异(保证测量在我的 DataFrame 中按顺序排列)。

所以基本上这归结为向我的 DataFrame 添加一个额外的列,其中此数据框的行值与同一行中 'steps' 列的值相匹配,减去 [=25] 的值=] 上一行中的列(如果这是第一行,则为 0)。更复杂的是,我想计算每个 user_id 的这些差异,所以我想确保我不会减去具有不同 user_id 的两行的步长值。

有谁知道如何使用 Python 2.7 和 Panda 完成这项工作?

举个例子来说明这一点。

示例输入:

user_id     steps
   1015       48
   1015       23
   1015       79
   1016       10
   1016       20

期望的输出:

user_id     steps    d_steps
   1015       48          0
   1015       23        -25
   1015       79         56
   2023       10          0
   2023       20         10

您的输出显示的用户 ID 不在您的原始数据中,但以下是您想要的,您必须 replace/fill NaN 值为 0:

In [16]:

df['d_steps'] = df.groupby('user_id').transform('diff')
df.fillna(0, inplace=True)
df
Out[16]:
   user_id  steps  d_steps
0     1015     48        0
1     1015     23      -25
2     1015     79       56
3     1016     10        0
4     1016     20       10

在这里,我们通过调用减去前一行值的 transform on the groupby by object and pass a string which maps to the diff 方法生成所需的列。 Transform 应用一个函数和 returns 一个索引与 df 对齐的序列。