我们说我有这个数据框
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。
感谢所有帮助。
答案 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