pandas - 为多个类别绘制条形图
pandas - plot bar chart for multiple categories
我有这个数据框:
列:
Countries
IsVertical
示例:
USA FALSE
USA FALSE
Poland FALSE
Italy TRUE
Italy TRUE
我想创建一个条形图,每个国家/地区有 2 列(1 列为真,1 列为假 - 来自 IsVertical),我需要 y 轴是该国家/地区出现次数的标准化计数。
我试过这样的事情:
data.groupby("Country").count().plot(kind="bar")
问题是它没有给我每个国家/地区的 2 个 IsVertical 柱,它只计算 IsVertical 出现的次数,而不是除以 IsVertical 的总次数
解决方案:
result = data.groupby('Country').apply(
lambda group: (group.IsVertical.sum() / float(data.IsVertical.sum()))
).to_frame('Vertical')
result.plot(kind='bar')
result = df.groupby('Countries').apply(
lambda group: (group.IsVertical == 'TRUE').sum() /
float(group.IsVertical.count())
).to_frame('Vertical')
result['NotVertical'] = 1 - result.Vertical
>>> result
Vertical NotVertical
Countries
Italy 1 0
Poland 0 1
USA 0 1
result.plot(kind='bar')
我有这个数据框:
列:
Countries
IsVertical
示例:
USA FALSE
USA FALSE
Poland FALSE
Italy TRUE
Italy TRUE
我想创建一个条形图,每个国家/地区有 2 列(1 列为真,1 列为假 - 来自 IsVertical),我需要 y 轴是该国家/地区出现次数的标准化计数。
我试过这样的事情:
data.groupby("Country").count().plot(kind="bar")
问题是它没有给我每个国家/地区的 2 个 IsVertical 柱,它只计算 IsVertical 出现的次数,而不是除以 IsVertical 的总次数
解决方案:
result = data.groupby('Country').apply(
lambda group: (group.IsVertical.sum() / float(data.IsVertical.sum()))
).to_frame('Vertical')
result.plot(kind='bar')
result = df.groupby('Countries').apply(
lambda group: (group.IsVertical == 'TRUE').sum() /
float(group.IsVertical.count())
).to_frame('Vertical')
result['NotVertical'] = 1 - result.Vertical
>>> result
Vertical NotVertical
Countries
Italy 1 0
Poland 0 1
USA 0 1
result.plot(kind='bar')