在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|
我希望通过“实验室”进行汇总。 (或标签的任何组合)并使数据帧返回聚合而不必重新定义列计算。我意识到这对于手动编码来说是微不足道的,但是当你有很多列时,它是重复的。
答案 0 :(得分:2)
使用apply
或agg
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