python - 在数据框中绘制零和一的计数
问题描述
我有一个这样的数据框:
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
我想要一个条形图,根据 x 轴上的每个名称分别显示 y 轴上 0 和 1 的计数,如下所示:
我怎样才能做到这一点?
解决方案
试试这个可运行的代码:
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-indexes 数据框可用于更轻松地创建所需的条形图。
你错过了专注于数据帧的处理,让人们认为你要求的东西已经有了很好的答案。
推荐阅读
- python - Time.Sleep() 正在冻结我的 pygame 窗口并冻结我的函数
- r - 添加具有特定组合的列
- reactjs - 使用 openapi-generator 启用 CORS
- c# - 如何更改 asp.net Core 3 或 Net Core 5 中的默认端口
- google-cloud-platform - 是否可以在 GCP/stackdriver 中创建基于日志的累积指标?
- github - Github Actions 无法写入文件,权限被拒绝(在 docker 容器内)
- flutter - 在 Flutter 中设置父 Widget 的状态
- ios - WatchOS 动态通知不适用于 Xcode 11.1 及更高版本 - 未调用 didReceive
- three.js - THREE.js - TypeError: url.search 不是一个函数。(在 'url.search( /\.jpe?g($|\?)/i )' 中,'url.search' 未定义)
- sql-server - SQL Server XML 查询嵌套节点