pandas.groupby 的 group_keys 参数实际上是做什么的?

2024-01-30

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的回答。


group_keys参数输入groupby http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html期间派上用场apply http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html创建与分组列相对应的附加索引列的操作(group_keys=True)并消除这种情况(group_keys=False)尤其是在尝试对各个列执行操作的情况下。

一个这样的例子:

In [21]: gby = df.groupby('x',group_keys=True).apply(lambda row: row['x'])

In [22]: gby
Out[22]: 
x   
0  0    0
2  3    2
   4    2
3  1    3
   2    3
Name: x, dtype: int64

In [23]: gby_k = df.groupby('x', group_keys=False).apply(lambda row: row['x'])

In [24]: gby_k
Out[24]: 
0    0
3    2
4    2
1    3
2    3
Name: x, dtype: int64

其预期应用之一可能是通过将层次结构的某一级别转换为Multi-index数据框对象。

In [27]: gby.groupby(level='x').sum()
Out[27]: 
x
0    0
2    4
3    6
Name: x, dtype: int64
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas.groupby 的 group_keys 参数实际上是做什么的? 的相关文章

随机推荐