gpt4 book ai didi

Python/Pandas - 使用第一个/最后一个函数聚合数据帧而不进行分组

转载 作者:行者123 更新时间:2023-12-02 08:58:23 27 4
gpt4 key购买 nike

我正在尝试使用 pandas 聚合整个数据框,而不按任何内容进行分组。

我确实需要针对不同的列使用不同的函数,因此我使用字典,但是传递“第一个”或“最后一个”作为聚合函数会引发ValueError:没有结果,而其他诸如“min'/'max'/'mean' 没有问题。

这是代码的简化。

df = pd.DataFrame({'Col1':[1,2,3,4], 'Col2':[5,6,7,8], 'Col3':[9,10,11,12]})

func = {col: ['first', 'last'] if col in ['Col1']
else ['first', 'last', 'mean'] if col in ['Col2']
else 'mean' for col in df.columns}

result = df.agg(func)

使用

result = df.groupby(lambda _ : True).agg(func)

完成了这项工作,但速度相当慢,我认为是由于 groupby 造成的。该数据帧已经是无法进一步分组的较大数据帧的子集。

我有数百列,无法单独聚合它们。

是否有其他方法可以比分组更快/更有效地获取第一行和最后一行以及不同的聚合?

对于这样的示例数据框

   Col1  Col2  Col3
0 1 5 9
1 2 6 10
2 3 7 11
3 4 8 12

输出应该是

      Col1       Col2            Col3
first last first last mean mean
True 1 4 5 8 6.5 10.5

编辑:正如原始的 groupby 函数所做的那样,不应删除空值/列。

最佳答案

更新:

df = pd.DataFrame({'Col1':[1,2,3,4], 'Col2':[5,6,7,8], 'Col3':[9,10,11,12]})
group_1 = ['Col1']
group_2 = ['col2']
func = {col:[fvalue, lvalue] if col in group_1
else [fvalue, lvalue, 'mean'] if col in group_2
else 'mean' for col in df.columns}

df.agg(func).unstack().to_frame().dropna().T

输出:

    Col1        Col2  Col3
fvalue lvalue mean mean
0 1.0 4.0 6.5 10.5

让我们看看使用自定义函数而不使用 groupby 是否会有所帮助:

def fvalue(x):
return x.iloc[0]

def lvalue(x):
return x.iloc[-1]

func = {col:[fvalue, lvalue] if col in group_1
else [fvalue, lvalue, 'mean'] if col in group_2
else 'mean' for col in df.columns}

df.agg(func)

关于Python/Pandas - 使用第一个/最后一个函数聚合数据帧而不进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59358385/

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