gpt4 book ai didi

python - 删除生成数据帧的 groupby-apply 函数的无关索引

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:43 24 4
gpt4 key购买 nike

这是我在各种情况下遇到的问题,我很好奇我是否做错了什么,或者我的整个方法是否错误。特定的数据/函数在这里并不重要,但无论如何我都会提供一个具体的示例。

想要一个 groupby/apply 对每个组执行各种操作并返回一个新的数据帧并不罕见。一个例子可能是这样的:

def patch_stats(df):
first = df.iloc[0]
diversity = (len(df['artist_id'].unique())/float(len(df))) * df['dist'].mean()
start = first['ts']
return pd.DataFrame({'diversity':[diversity],'start':[start]})

因此,这是一个分组函数,它生成一个具有两列的新 DataFrame,每一列都源自对输入数据的不同操作。同样,具体细节在这里并不是太重要,但这就是问题所在:

当我查看输出时,我得到如下内容:

result =  df.groupby('patch_idx').apply(patch_stats)
print result

diversity start
patch_idx
0 0 0.876161 2007-02-24 22:54:28
1 0 0.588997 2007-02-25 01:55:39
2 0 0.655306 2007-02-25 04:27:05
3 0 0.986047 2007-02-25 05:37:58
4 0 0.997020 2007-02-25 06:27:08
5 0 0.639499 2007-02-25 17:40:56
6 0 0.687874 2007-02-26 05:24:11
7 0 0.003714 2007-02-26 07:07:20
8 0 0.065533 2007-02-26 09:01:11
9 0 0.000000 2007-02-26 19:23:52
10 0 0.068846 2007-02-26 20:43:03
...

一切都很好,除了我不想要一个无关的、未命名的索引级别:

print result.index.names

FrozenList([u'patch_idx', None])

现在,这不是什么大不了的事;我总是可以通过以下方式摆脱无关的索引级别:

result = result.reset_index(level=1,drop=True)

但是当我有返回 DataFrame 的分组函数时,看看这是如何出现的,我想知道是否有更好的方法来解决这个问题。有一个返回 DataFrame 的分组函数是一种不好的形式吗?如果是这样,获得相同结果的正确方法是什么? (同样,这是适合此类问题的一般问题)

最佳答案

在分组函数中,返回 Series 而不是 DataFrame。具体来说,将 patch_stats 的最后一行替换为:

return pd.Series({'diversity':diversity, 'start':start})

关于python - 删除生成数据帧的 groupby-apply 函数的无关索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078623/

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