In pandas.DataFrame.groupby http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html,有一个论证group_keys
,我收集的应该是做一些与如何将组键包含在数据帧子集中有关的事情。根据文档:
组键 : 布尔值,默认 True
调用apply时,将组键添加到索引中以识别棋子
但是,我真的找不到任何例子group_keys
产生实际差异:
import pandas as pd
df = pd.DataFrame([[0, 1, 3],
[3, 1, 1],
[3, 0, 0],
[2, 3, 3],
[2, 1, 0]], columns=list('xyz'))
gby = df.groupby('x')
gby_k = df.groupby('x', group_keys=False)
它对输出没有影响apply
:
ap = gby.apply(pd.DataFrame.sum)
# x y z
# x
# 0 0 1 3
# 2 4 4 3
# 3 6 1 1
ap_k = gby_k.apply(pd.DataFrame.sum)
# x y z
# x
# 0 0 1 3
# 2 4 4 3
# 3 6 1 1
即使您随时打印出分组的子集,结果仍然相同:
def printer_func(x):
print(x)
return x
print('gby')
print('--------------')
gby.apply(printer_func)
print('--------------')
print('gby_k')
print('--------------')
gby_k.apply(printer_func)
print('--------------')
# gby
# --------------
# x y z
# 0 0 1 3
# x y z
# 0 0 1 3
# x y z
# 3 2 3 3
# 4 2 1 0
# x y z
# 1 3 1 1
# 2 3 0 0
# --------------
# gby_k
# --------------
# x y z
# 0 0 1 3
# x y z
# 0 0 1 3
# x y z
# 3 2 3 3
# 4 2 1 0
# x y z
# 1 3 1 1
# 2 3 0 0
# --------------
我考虑了默认参数实际上是的可能性True
,但是切换group_keys
明确地False
也没有什么区别。这个论点究竟是为了什么?
(Run on pandas
版本0.18.1
)
Edit:我确实找到了一种方法group_keys
改变行为,基于这个答案 https://stackoverflow.com/a/34282449/467366:
import pandas as pd
import numpy as np
row_idx = pd.MultiIndex.from_product(((0, 1), (2, 3, 4)))
d = pd.DataFrame([[4, 3], [1, 3], [1, 1], [2, 4], [0, 1], [4, 2]], index=row_idx)
df_n = d.groupby(level=0).apply(lambda x: x.nlargest(2, [0]))
# 0 1
# 0 0 2 4 3
# 3 1 3
# 1 1 4 4 2
# 2 2 4
df_k = d.groupby(level=0, group_keys=False).apply(lambda x: x.nlargest(2, [0]))
# 0 1
# 0 2 4 3
# 3 1 3
# 1 4 4 2
# 2 2 4
但是,我仍然不清楚背后的可理解原理group_keys
is 应该做的。这种行为似乎并不直观@piRSquared的回答。