【发布时间】:2019-02-01 07:04:13
【问题描述】:
情况
考虑以下两个数据框:
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,但除此之外,df2 与 df1 相同。
现在考虑以下分组聚合操作:
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_df1、result_x_df2 和 result_y_df1 看起来完全符合我的预期。然而,真正让我感到困惑的是,在result_y_df2 中,categoricals 列D 已被完全丢弃。这就提出了以下问题:
- 为什么
result_y_df2中的分类列D被丢弃? - 如何防止分类列
D被丢弃,即如何从df2获得类似于result_y_df1的分组聚合结果?
【问题讨论】:
-
.head(1)可能会有所帮助,但仍然很好奇为什么first会丢弃分类列 -
@Dark 使用
head(1)而不是first()似乎确实可以解决问题! -
Pandas 0.21.0 版给出了预期的结果。更新的版本一定改变了一些东西。
-
@RaunaqJain 很有趣。我想知道与
pandas0.21.0 相比的行为变化是错误还是故意修改? -
我很想调试它。可悲的是,我不知道如何去做。如果有人可以指导我完成,我将不胜感激。学习的好机会。
标签: python pandas aggregate categories pandas-groupby