【发布时间】:2013-06-15 01:46:15
【问题描述】:
考虑 DataFrame:
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?
【问题讨论】:
-
我觉得第一个是不正确的行为。就像流行的说法:“编写聚合函数很难……让我们去编写应用函数吧。”
标签: pandas