“原 DataFrame” 与 “使用了 groupby 之后的分组 DataFrame",在调用 apply 方法时,有些许差异
df = pd.DataFrame([[j for j in range(1, 5)] for i in range(5)], index=list("ABBDA"))
df
# Out[227]:
# 0 1 2 3
# A 1 2 3 4
# B 1 2 3 4
# B 1 2 3 4
# D 1 2 3 4
# A 1 2 3 4
""" 1、直接使用函数名时,都能正常运行 """
df.apply(min, axis=1)
# Out[265]:
# A 1
# B 1
# B 1
# D 1
# A 1
# dtype: int64
df.groupby(df.index).apply(min, axis=1)
# Out[276]:
# A A 1
# A 1
# B B 1
# B 1
# D D 1
# dtype: int64
""" 2、使用函数名的字符串形式时,进行了分组操作的 DataFrame 就会报错 """
df.apply('min', axis=1)
# Out[288]:
# A 1
# B 1
# B 1
# D 1
# A 1
# dtype: int64
# 报错:AttributeError: 'DataFrame' object has no attribute 'dtype'
# df.groupby(df.index).apply('min', axis=1)
# 报错:TypeError: 'str' object is not callable
# df.groupby(df.index).apply('min')
""" 3、传入函数名列表的时候,进行了分组操作的 DataFrame 也会报错 """
df.apply(['min', max], axis=1)
# Out[289]:
# min max
# A 1 4
# B 1 4
# B 1 4
# D 1 4
# A 1 4
# 报错:TypeError: unhashable type: 'list'
# df.groupby(df.index).apply([min, 'max'])