首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每个系列的Pandas groupby自定义函数

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

Stack Overflow用户
提问于 2017-06-04 04:49:43
回答 1查看 20.6K关注 0票数 9

我很难将自定义函数应用到Pandas中的每一组groupby列

我的自定义函数接受一系列数字,取连续对的差值,并返回所有差值的平均值。下面是代码

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
 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。请帮帮我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-04 04:53:32

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

代码语言:javascript
运行
复制
df.groupby('one')['two'].agg(lambda x: x.diff().mean())
one
a    3
b    1
Name: two, dtype: int64

并重置索引:

代码语言:javascript
运行
复制
df.groupby('one')['two'].agg(lambda x: x.diff().mean()).reset_index(name='two')


    one  two
0   a    3
1   b    1

另一种方法是:

代码语言:javascript
运行
复制
df.groupby('one')['two'].diff().groupby(df['one']).mean()
one
a    3.0
b    1.0
Name: two, dtype: float64

您的方法也适用于以下情况:

代码语言:javascript
运行
复制
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。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44348426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档