我有一个这样格式的数据帧:

| Department | Person | Power  | ... |
|------------|--------|--------|-----|
| ABC        | 1234   |  75    | ... |
| ABC        | 1235   |  25    | ... |
| DEF        | 1236   |  50    | ... |
| DEF        | 1237   | 100    | ... |
| DEF        | 1238   |  25    | ... |
| DEF        | 1239   |  50    | ... |

我现在要得到的是power列中每个值的出现次数之和如何从我的数据框中获取此信息?
| Department | 100 |  75 |  50 |  25 |
|------------|-----|-----|-----|-----|
| ABC        |   0 |   1 |   0 |   1 |
| DEF        |   1 |   0 |   2 |   1 |

最佳答案

您可以将value_countssort_index一起使用,然后通过DataFrame生成to_frame并通过T最后转置:

print (df.Power.value_counts().sort_index(ascending=False).to_frame().T)
       100  75   50   25
Power    1    1    2    2

按注释编辑:
你需要crosstab
print (pd.crosstab(df.Department, df.Power).sort_index(axis=1, ascending=False))
Power       100  75   50   25
Department
ABC           0    1    0    1
DEF           1    0    2    1

使用groupbyunstack加速另一个解决方案:
print (df.groupby(['Department','Power'])
         .size()
         .unstack(fill_value=0)
         .sort_index(axis=1, ascending=False))

Power       100  75   50   25
Department
ABC           0    1    0    1
DEF           1    0    2    1

如果需要按列groupbyDepartment添加列PersonPerson到第二个位置(谢谢piRSquared):
print (df.groupby(['Department','Person', 'Power'])
         .size()
         .unstack(fill_value=0)
         .sort_index(axis=1, ascending=False))

Power              100  75   50   25
Department Person
ABC        1234      0    1    0    0
           1235      0    0    0    1
DEF        1236      0    0    1    0
           1237      1    0    0    0
           1238      0    0    0    1
           1239      0    0    1    0

按注释编辑1:
如果需要添加其他缺少的值,请使用groupby
print (df.groupby(['Department','Power'])
         .size()
         .unstack(fill_value=0)
         .reindex(columns=[100,75,50,25,0], fill_value=0))

Power       100  75   50   25   0
Department
ABC           0    1    0    1    0
DEF           1    0    2    1    0

关于python - 计算DataFrame中的出现次数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39250504/

10-10 06:34