试试这个可运行的代码:
import pandas as pd
from io import StringIO
from matplotlib import pyplot
data2 ="""Index Name Detection
0 name1 0
1 name2 0
2 name3 0
3 name1 1
4 name3 1
5 name2 1
6 name1 1
7 name1 0"""
df2 = pd.read_csv(StringIO( data2 ), sep='\s+', index_col='Index', engine='python')
print(df2)
result = df2.groupby(['Name']).count()
print()
print(result)
result.plot(kind='bar')
输出文字:
Name Detection
Index
0 name1 0
1 name2 0
2 name3 0
3 name1 1
4 name3 1
5 name2 1
6 name1 1
7 name1 0
Detection
Name
name1 4
name2 2
name3 2
输出图:
编辑
更新的代码:
import pandas as pd
from io import StringIO
from matplotlib import pyplot
data2 ="""Index Name Detection
0 name1 0
1 name2 0
2 name3 0
3 name1 1
4 name3 1
5 name2 1
6 name1 1
7 name1 0"""
df2 = pd.read_csv(StringIO( data2 ), sep='\s+', index_col='Index', engine='python')
result = df2.groupby(by=['Name','Detection']).size().reset_index()
result.rename(columns={0:"count"}, inplace=True)
# plot bar graph
result.set_index(["Name","Detection"])['count'].unstack().plot.bar()
输出图:
注意
result.set_index(["Name","Detection"])
是这种形式的数据框:
count
Name Detection
name1 0 2
1 2
name2 0 1
1 1
name3 0 1
1 1
这是你问题的本质,而不是条形图。数据框现在有2个索引,可以count
清晰地显示(名称,检测)的每个成对索引的值,比原始索引更直观。2索引数据框可用于更轻松地创建所需的条形图。
你错过了专注于数据帧的处理,使人们认为你要求的东西已经有了很好的答案。
谢谢,但是我想根据每个名称将“检测”(0的红色和1的蓝色)的计数绘制为y轴。例如,name1-> 2(0's)和name1-> 2(1's)
@meee您可以编辑问题以重新打开它。如果您可以适当地做的话,我将投票将其打开。
@meee投票结束的人们认为您的数据框已准备好绘制这种条形图,并且您的问题已经有了很好的答案。实际上,这还没有准备好或不方便。我需要演示一些操作。结果具有成对索引的数据帧是结果,并且比绘图更重要。使用这种形式的数据框,您需要一线代码来绘制所需的内容。