为什么 pandas grouping-aggregation 会丢弃分类列?
Why does pandas grouping-aggregation discard categoricals column?
情况
考虑以下两个数据帧:
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
中的 分类列 D
已被完全丢弃 。这就提出了问题:
- 为什么在
result_y_df2
中丢弃了分类列 D
?
- 如何防止分类列
D
被丢弃,即如何从 df2
获得类似于 result_y_df1
的分组聚合结果?
问题的原因似乎是 pandas 中的回归错误(从版本 0.23.0
开始出现)。解决方法是使用 head(1)
而不是 first()
(如 Dark 所建议的)。
请参阅 this pandas github issue 了解新进展。
情况
考虑以下两个数据帧:
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
中的 分类列 D
已被完全丢弃 。这就提出了问题:
- 为什么在
result_y_df2
中丢弃了分类列D
? - 如何防止分类列
D
被丢弃,即如何从df2
获得类似于result_y_df1
的分组聚合结果?
问题的原因似乎是 pandas 中的回归错误(从版本 0.23.0
开始出现)。解决方法是使用 head(1)
而不是 first()
(如 Dark 所建议的)。
请参阅 this pandas github issue 了解新进展。