假设我有一个包含两列的 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 对齐。