考虑数据框:
import pandas as pd
df = pd.DataFrame({'A':[1,2,1,2],
'B':[1,2,1,2],
'C':list('WXYZ'),
'D':list('abcd')})
df.set_index('A', inplace=True)
print(df)
# B C D
# A
# 1 1 W a
# 2 2 X b
# 1 1 Y c
# 2 2 Z d
def myagg(x):
print(type(x).__name__)
print(x)
通常,df.groupby(...).agg(myagg)
会将(子)DataFrames 传递给
myagg
. 例如,
df.groupby(level=0).agg(myagg)
# DataFrame
# B C D
# A
# 1 1 W a
# 1 1 Y c
# DataFrame
# B C D
# A
# 2 2 X b
# 2 2 Z d
但是,如果您使用多级索引,则 myagg 将传递一个系列:
df2 = df.set_index(['B'], append=True)
df2.groupby(level=['A','B']).agg(myagg)
# Series
# A B
# 1 1 W
# 1 Y
# Name: C
# Series
# A B
# 2 2 X
# 2 Z
# Name: C
# Series
# A B
# 1 1 a
# 1 c
# Name: D
# Series
# A B
# 2 2 b
# 2 d
# Name: D
有时这可能非常有用,但我想更好地理解何时agg
将单列(系列)传递给myagg
,以及何时传递整个 DataFrame?