我很难将自定义函数应用到Pandas中的每一组groupby列
我的自定义函数接受一系列数字,取连续对的差值,并返回所有差值的平均值。下面是代码
def mean_gap(a):
b = []
for i in range(0, len(a)-1):
b.append((a[i+1]-a[i]))
return np.mean(b)
所以如果a= 1,3,7 mean_gap(a)会得到((3-1)+(7-3))/2) = 3.0
Dataframe:
one two
a 1
a 3
a 7
b 8
b 9
desired result
Dataframe:
one two
a 3
b 1
Df.groupby(‘一’)‘二’。?
我是第一次接触熊猫。我读到groupby每次取每一行的值,而不是整个序列。所以我不能在groupby之后使用lambda。请帮帮我!
发布于 2017-06-04 04:53:32
使用自定义函数,您可以执行以下操作:
df.groupby('one')['two'].agg(lambda x: x.diff().mean())
one
a 3
b 1
Name: two, dtype: int64
并重置索引:
df.groupby('one')['two'].agg(lambda x: x.diff().mean()).reset_index(name='two')
one two
0 a 3
1 b 1
另一种方法是:
df.groupby('one')['two'].diff().groupby(df['one']).mean()
one
a 3.0
b 1.0
Name: two, dtype: float64
您的方法也适用于以下情况:
def mean_gap(a):
b = []
a = np.asarray(a)
for i in range(0, len(a)-1):
b.append((a[i+1]-a[i]))
return np.mean(b)
df.groupby('one')['two'].agg(mean_gap)
one
a 3
b 1
Name: two, dtype: int64
a = np.asarray(a)
是必要的,因为否则你会在b.append((a[i+1]-a[i]))
中得到KeyErrors。
https://stackoverflow.com/questions/44348426
复制相似问题