Groupby,将功能应用于具有移位的每一行,并创建新列

时间:2019-03-14 23:43:24

标签: python pandas pandas-groupby

我想按id分组,对数据应用一个函数,然后用结果创建一个新列。与将数据传递给函数,进行更改并返回数据相比,似乎必须有一种更快/更有效的方法。这是一个例子。

示例

dat = pd.DataFrame({'id': ['a', 'a', 'a', 'b', 'b', 'b'], 'x': [4, 8, 12, 25, 30, 50]})

def my_func(data):
    data['diff'] = (data['x'] - data['x'].shift(1, fill_value=data['x'].iat[0]))
    return data

dat.groupby('id').apply(my_func)

输出

> print(dat)


id  x   diff
0   a   4   0
1   a   8   4
2   a   12  4
3   b   25  0
4   b   30  5
5   b   50  20

有没有更有效的方法?

1 个答案:

答案 0 :(得分:2)

您可以为此使用.groupby.diff(),然后在NaN中填充零,如下所示:

dat['diff'] = dat.groupby('id').x.diff().fillna(0)

print(dat)
  id   x  diff
0  a   4   0.0
1  a   8   4.0
2  a  12   4.0
3  b  25   0.0
4  b  30   5.0
5  b  50  20.0