如何基于基于行的计算将新列追加到我的 Pandas 数据帧



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

所以基本上这归结为在我的数据帧中附加一个额外的列,其中该数据框的行值与同一行中"步骤"列的值相匹配,减去上面行中"步骤"列的值(如果这是第一行,则为 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 不在原始数据中,但以下内容可以满足您的需求,您必须用 0 替换/填充NaN值:

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

在这里,我们通过在 groupby by 对象上调用 transform 来生成所需的列,并传递一个字符串,该字符串映射到减去前一行值的 diff 方法。转换应用一个函数并返回一个序列,其索引与 df 对齐。

最新更新