我想按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
有没有更有效的方法?
答案 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