为什么熊猫分组聚集会丢弃类别列?

时间:2018-08-26 15:03:38

标签: python pandas aggregate categories pandas-groupby

情况

请考虑以下两个数据框:

import pandas as pd  # version 0.23.4

df1 = pd.DataFrame({
    'A': [1, 1, 1, 2, 2],
    'B': [100, 100, 200, 100, 100],
    'C': ['apple', 'orange', 'mango', 'mango', 'orange'],
    'D': ['jupiter', 'mercury', 'mars', 'venus', 'venus'],
})

df2 = df1.astype({'D': 'category'})

正如您在数据框df2中所看到的,列D属于categoricals数据类型,但其他情况下df2df1相同。

现在考虑以下分组汇总操作:

result_x_df1 = df1.groupby(by='A').first()
result_x_df2 = df2.groupby(by='A').first()
result_y_df1 = df1.groupby(by=['A', 'B']).first()
result_y_df2 = df2.groupby(by=['A', 'B']).first()

结果如下:

In [1]: result_x_df1
Out[1]:
     B      C        D
A
1  100  apple  jupiter
2  100  mango    venus

In [2]: result_x_df2
Out[2]:
     B      C        D
A
1  100  apple  jupiter
2  100  mango    venus

In [3]: result_y_df1
Out[3]:
           C        D
A B
1 100  apple  jupiter
  200  mango     mars
2 100  mango    venus

In [4]: result_y_df2
Out[4]:
           C
A B
1 100  apple
  200  mango
2 100  mango

问题

result_x_df1result_x_df2result_y_df1看起来完全符合我的预期。但是,令我真正困惑的是,在result_y_df2中,类别列D已被完全丢弃。这引发了以下问题:

  • 为什么分类列Dresult_y_df2中被丢弃?
  • 如何防止分类列D被丢弃,即如何从df2获得类似于result_y_df1的分组汇总结果?

1 个答案:

答案 0 :(得分:2)

该问题的原因似乎是熊猫的回归错误(从rdl版开始)。一种解决方法是使用0.23.0代替head(1)(如Dark所建议)。

有关新动态,请参见https://help.syncfusion.com/angularjs/reportviewer/getting-started