Pandas分组统计数值频率

5

我有一组样本数据

STATE   CAPSULES     LIQUID         TABLETS  
Alabama NaN          Prescription   OTC
Georgia Prescription NaN            OTC
Texas   OTC          OTC            NaN
Texas   Prescription NaN            NaN
Florida NaN          Prescription   OTC
Georgia OTC          Prescription   Prescription
Texas   Prescription NaN            OTC
Alabama NaN          OTC            OTC
Georgia OTC          NaN            NaN

我尝试了多种 groupby 配置,以获得以下理想结果:

State   capsules_OTC    capsules_prescription   liquid_OTC  liquid_prescription tablets_OTC tablets_prescription
Alabama    0             0                         0              0               0           0
Florida    0             0                         0              0               0           0
Georgia    1             1                         1              1               1           1
Texas      1             2                         2              2               2           2

例如,尝试了这个:

df.groupby(['STATE','CAPSULES'])

尝试至少整理第一列,但没有成功。也许这不是一个简单的答案,但我想我在groupby和count()或其他apply函数方面错过了一些简单的东西?
1个回答

4
使用groupbysum结合pd.get_dummies函数。
pd.get_dummies(df, columns=['CAPSULES', 'LIQUID', 'TABLETS'])\
  .groupby('STATE', as_index=False).sum()

输出:

     STATE  CAPSULES_OTC  CAPSULES_Prescription  LIQUID_OTC  LIQUID_Prescription  TABLETS_OTC  TABLETS_Prescription
0  Alabama             0                      0           1                    1            2                     0
1  Florida             0                      0           0                    1            1                     0
2  Georgia             2                      1           0                    1            1                     1
3    Texas             1                      2           1                    0            1                     0

1
由于您已经将STATE作为索引,因此可以跳过groupby操作:pd.get_dummies(df, columns=['CAPSULES', 'LIQUID', 'TABLETS']).sum(level='STATE') - Erfan
1
@Scott Boston的回答完美地解决了我的问题。得到的数据值是浮点数,但这很容易修改。哇,只需要一行代码,就可以解决我今天花费小时才能弄明白的问题。Stackoverflow的人们再次拯救了我!太棒了!!! - John Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接