每个系列的Pandas groupby自定义函数

2024-04-19 02:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难对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] 平均间隙(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']。???

我对熊猫不熟悉。我读到groupby一次获取每行的值,而不是完整的序列。所以我不能在groupby之后使用lambda。请帮忙!


Tags: 函数代码indataframepandasfordef数字
1条回答
网友
1楼 · 发布于 2024-04-19 02:22:56

使用自定义函数,可以执行以下操作:

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]))中获得键错误。

相关问题 更多 >