28

我正在做一个简单的分组操作,试图比较分组方式。正如您在下面看到的,我从一个较大的数据框中选择了特定的列,其中所有缺失值都已删除。

选定的列和 df 头

但是当我分组时,我丢失了几列:

分组逻辑和结果df

我从来没有在 pandas 上遇到过这种情况,而且我在堆栈溢出上也没有发现任何类似的东西。有没有人有任何见识?

4

3 回答 3

31

我认为是,这里Automatic exclusion of 'nuisance' columns描述的。

样本:

df = pd.DataFrame({'C': {0: -0.91985400000000006, 1: -0.042379, 2: 1.2476419999999999, 3: -0.00992, 4: 0.290213, 5: 0.49576700000000001, 6: 0.36294899999999997, 7: 1.548106}, 'A': {0: 'foo', 1: 'bar', 2: 'foo', 3: 'bar', 4: 'foo', 5: 'bar', 6: 'foo', 7: 'foo'}, 'B': {0: 'one', 1: 'one', 2: 'two', 3: 'three', 4: 'two', 5: 'two', 6: 'one', 7: 'three'}, 'D': {0: -1.131345, 1: -0.089328999999999992, 2: 0.33786300000000002, 3: -0.94586700000000001, 4: -0.93213199999999996, 5: 1.9560299999999999, 6: 0.017587000000000002, 7: -0.016691999999999999}})
print (df)
     A      B         C         D
0  foo    one -0.919854 -1.131345
1  bar    one -0.042379 -0.089329
2  foo    two  1.247642  0.337863
3  bar  three -0.009920 -0.945867
4  foo    two  0.290213 -0.932132
5  bar    two  0.495767  1.956030
6  foo    one  0.362949  0.017587
7  foo  three  1.548106 -0.016692

print( df.groupby('A').mean())
            C         D
A                      
bar  0.147823  0.306945
foo  0.505811 -0.344944

我想你可以检查一下DataFrame.dtypes

于 2016-06-01T18:15:14.907 回答
6

试试df.groupby(['col_1', 'col_2'], as_index=False).mean()。用于as_index=False保留列名。默认为真。以上评论已经回答了这个问题,但将其作为答案发布。

于 2020-06-15T20:01:27.817 回答
2

确保您的列是数字/整数格式,而不是像“O”这样的对象格式。这是它对我消失的原因之一。

您可以通过下面的 hte 代码检查列的格式:

df.column.dtypes
于 2020-09-01T12:39:21.787 回答