Pandas为列创建自定义groupby聚合

2024-10-03 02:46:35 发布

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

在Pandas中有没有一种方法可以创建一个新的列,它是两列聚合的函数,这样对于任意分组,它都会保留这个函数?这在功能上类似于在excel中创建计算列和按标签旋转。在

df1 = pd.DataFrame({'lab':['lab1','lab2']*5,'A':[1,2]*5,'B':[4,5]*5})
df1['C'] = df1.apply(lambda x: x['A']/x['B'],axis=1)
pd.pivot_table(df1,index='lab',{'A':sum,'B':sum,'C':lambda x: x['A']/x['B']})

应返回: |lab|A B|C| |----|---|---| |lab1|5 |20|.25| |lab2|10|25 |.4|

我希望通过'lab'(或任何标签组合)进行聚合,并让dataframe返回聚合,而不必重新定义列计算。我意识到这对于手动代码来说很简单,但是当您有很多列时,它是重复的。在


Tags: 方法lambda函数功能dataframepandaslab标签
1条回答
网友
1楼 · 发布于 2024-10-03 02:46:35

有两种方法可以使用applyagg

import numpy as np
import pandas as pd

# Method 1
df1.groupby('lab').apply(lambda df: pd.Series({'A': df['A'].sum(), 'B': df['B'].sum(), 'C': df['C'].unique()[0]})).reset_index()

# Method 2
df1.groupby('lab').agg({'A': 'sum',
                    'B': 'sum',
                    'C': lambda x: np.unique(x)}).reset_index()

# output
     lab  A    B   C
0   lab1  5    20 0.25
1   lab2  10   25 0.40

相关问题 更多 >