熊猫数据框groupby分类列,但爆炸后保留原始索引

时间:2020-07-15 19:30:09

标签: python pandas pandas-groupby

虚拟数据:

df = pd.DataFrame({'id': [1, 1, 1, 2, 2, 2],
                   'num': [12, 14, 18, 10, 10 ,11]})

现在,我想为每个num计算id的梯度。因此:

df.groupby(['id'])['num'].apply(np.gradient).explode()

但是,我不确定如何保留原始索引。我想出的解决方法很丑陋,我想知道是否有更好的方法。

df['gradient'] = df.groupby(['id'])['num'].apply(np.gradient).explode()\
                                          .reset_index().set_index(df.index)['num']

哪个会产生所需的结果:

    id  num gradient
0   1   12  2.0
1   1   14  3.0
2   1   18  4.0
3   2   10  0.0
4   2   10  0.5
5   2   11  1.0

1 个答案:

答案 0 :(得分:2)

groupby().transform似乎可以做到:

df['gradient'] = df.groupby(['id'])['num'].transform(np.gradient)

输出:

   id  num  gradient
0   1   12       2.0
1   1   14       3.0
2   1   18       4.0
3   2   10       0.0
4   2   10       0.5
5   2   11       1.0