使用groupby和agg为条形图准备数据框

时间:2016-02-14 13:06:13

标签: python pandas dataframe bar-chart

我们说我有这个数据框

d = {'group' : ('A', 'B', 'C', 'A', 'A', 'B') , 
     'T/F': (1, 0, 1, 0, 1, 1)}
df1 = pd.DataFrame(d)

看起来像这样

 T/F group
0    1     A
1    0     B
2    1     C
3    0     A
4    1     A
5    1     B

我想制作一个条形图,分类每组A,B和C中有多少1和多少0。我的猜测是我需要先将数据分组,以便为​​绘图做好准备,(请如果我错了,如果有一个简单的方法,请纠正我。)

我正在做的是:

bardata = df1.groupby('group').agg({'T/F': lambda x: sum(x == 1)})

虽然这有效并且它计算我拥有的1的数量(或者如果我想要的话是0)但它不能同时执行两者。例如,它目前给出

      T/F
group     
A        2
B        1
C        1

有什么好处的是另一列给出所有错误值的总和(再添加一个lambda也没有用,因为列名仍然是T / F)。我想用这些数据制作堆积条形图,这样我就可以看到每组有多少1和0。

感谢所有帮助。

1 个答案:

答案 0 :(得分:2)

你非常接近。在groupby之后,选择感兴趣的列(T/F)并将字典传递给agg函数。

bardata = df1.groupby('group')['T/F'].agg({'T': lambda x: sum(x == 1), 
                                           'F': lambda x: sum(x == 0)})

>>> bardata
       T  F
group      
A      2  1
B      1  1
C      1  0