gpt4 book ai didi

python - Pandas groupby 应用组合某些组但不组合其他组的功能

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:07 25 4
gpt4 key购买 nike

我在我的 DataFrame df 上使用 pandas groupby,它有 typesubtype 和 11 列其他的。然后我用我的 combine_function (需要一个更好的名字)在组上调用 apply ,例如:

    grouped = df('type')
reduced = grouped.apply(combine_function)

我的 combine_function 检查组中的任何元素是否包含具有给定子类型的任何元素,比如 1,并且看起来像:

def combine_function(group):
if 1 in group.subtype:
return aggregate_function(group)
else:
return group

combine_function 然后可以调用一个aggregate_function,计算汇总统计数据,将它们存储在第一行,然后将该行设置为组。看起来像:

def aggregate_function(group):
first = group.first_valid_index()
group.value1[group.index == first] = group.value1.mean()
group.value2[group.index == first] = group.value2.max()
group.value3[group.index == first] = group.value3.std()

group = group[(group.index == first)]
return group

我相当确定这不是执行此操作的最佳方法,但它已经给出了我想要的结果,99.9% 的时间在数千个 DataFrame 上。但是,它有时会抛出一个错误,该错误与我不想聚合的组有某种关系,该组恰好有 2 行:

ValueError: Shape of passed values is (13,), indices imply (13, 5)

我的示例组的大小:

In [4]: grouped.size()
Out[4]:
type
1 9288
3 7667
5 7604
11 2
dtype: int64

它很好地处理了 3 个 3,然后在尝试合并所有内容时给出了错误。如果我注释掉 group = group[(group.index == first)] 行,那么更新但不要在所有组上聚合或调用我的 aggregate_function 没问题。

有谁知道对某些组进行这种聚合而不是其他组的正确方法?

最佳答案

你的 aggregate_functions 在我看来很扭曲。当您聚合一组时,它会自动减少到一行;你不需要手动做。也许我错过了重点。 (你是在对我不理解的索引做一些特殊的事情吗?)但更正常的用法是这样的:

agg_condition = lambda x: Series([1]).isin(x['subtype]').any()
agg_functions = {'value1': np.mean, 'value2': np.max, 'value3': np.std}

df1 = df.groupby('type').filter(agg_condition).groupby('type').agg(**agg_functions)
df2 = df.groupby('type').filter(~agg_condition)

result = pd.concat([df1, df2])

注意:agg_condition 很乱,因为 (1) 内置的 Python in 指的是 Series 的 index,而不是它的值, (2) 结果必须通过 any() 缩减为标量。

关于python - Pandas groupby 应用组合某些组但不组合其他组的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20129598/

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