Xuk*_*rao 5 python aggregate categories pandas 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'})
Run Code Online (Sandbox Code Playgroud)
正如您在数据框中看到的那样,df2该列 D是分类数据类型,但在其他方面df2是相同的df1.
现在考虑以下groupby-aggregation操作:
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()
Run Code Online (Sandbox Code Playgroud)
结果如下:
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
Run Code Online (Sandbox Code Playgroud)
result_x_df1,result_x_df2并且result_y_df1看起来完全像我本来期望.真正让我为难不过的是,在result_y_df2该categoricals柱D已经完全抛弃.这引出了一些问题:
D在丢弃result_y_df2?D被丢弃,即如何获得分组聚合结果df2看起来类似于result_y_df1?问题的原因似乎是 pandas 中的回归错误(从版本0.23.0开始发生)。解决方法是使用head(1)而不是first()(如 Dark 建议的那样)。
请参阅这个 pandas github 问题以了解新的进展。