Python/Pandas使用first/last函数聚合数据帧而不进行分组

2024-04-19 23:43:52 发布

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

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

我确实需要为不同的列使用不同的函数,因此我使用字典,但是传递'first'或'last'作为聚合函数会抛出一个值错误:没有结果,而其他函数如'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)

做的工作,但相当慢,我想由于群比。 数据帧已经是无法进一步分组的较大数据帧的子集。你知道吗

我有成百上千的列,无法单独聚合它们。你知道吗

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

对于这样的示例数据帧

   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

Edit:与原始groupby函数一样,不应删除空值/列。你知道吗


Tags: 数据函数indfifcolresultmean
1条回答
网友
1楼 · 发布于 2024-04-19 23:43:52

更新:

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)

相关问题 更多 >