gpt4 book ai didi

python - Pandas groupby 自定义函数到每个系列

转载 作者:行者123 更新时间:2023-11-28 20:03:01 25 4
gpt4 key购买 nike

我很难将自定义函数应用于 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(['one'])['two'].???

我是 Pandas 的新手。我读到 groupby 一次取值每一行,而不是整个系列。所以我无法在 groupby 之后使用 lambda。请帮忙!

最佳答案

使用自定义函数,您可以:

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]))

关于python - Pandas groupby 自定义函数到每个系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44348426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com