我是熊猫的新用户。我一直在浏览帮助文档,并尝试各种实验(groupby(),multiindex,value_cuounts())。但是我无法获得理想的最终结果。
我的数据框如下(时间索引):
DATE, GROUP, X, Y, STATUS
2014-01-01 A 0 0 PASS
2014-01-01 A 0 1 FAIL
2014-01-01 A 1 0 PASS
2014-01-02 B 0 0 PASS
2014-01-02 B 0 1 PASS
2014-01-02 B 1 1 FAIL
....
'STATUS'列是dtype = category。我想最终得到一个新的数据框,如下所示:
DATE GROUP STATUS PCT
2014-01-01 A PASS 0.667
2014-01-01 A FAIL 0.333
2014-01-02 B PASS 0.667
2014-01-02 B FAIL 0.333
基本上,对于每个组,我想计算所有状态的百分比。
我尝试过df.groupby('GROUP')。value_counts()后跟除以sum()来计算百分比。这很好用。但是,我丢失了索引信息,我不知道将它添加到新数据帧以实现上面所需的输出。在熊猫中必须有一些简单的方法来做到这一点,但我没有看到它。
任何建议都表示赞赏。感谢。
答案 0 :(得分:0)
我会在“DATE”和“GROUP”列上执行groupby
,然后在“状态”列上调用transform
并致电value_counts
/ count
, transform
将返回与您的orig df对齐的系列,因此它允许您将其添加回新列:
In [64]:
df['PCT'] = df.groupby(['DATE','GROUP'])['STATUS'].transform(lambda x: x.value_counts() / x.count())
df
Out[64]:
DATE GROUP X Y STATUS PCT
0 2014-01-01 A 0 0 PASS 0.6666667
1 2014-01-01 A 0 1 FAIL 0.3333333
2 2014-01-01 A 1 0 PASS 0.6666667
3 2014-01-02 B 0 0 PASS 0.6666667
4 2014-01-02 B 0 1 PASS 0.3333333
5 2014-01-02 B 1 1 FAIL 0.6666667