n.r*_*.r. 2 python bar-chart distinct-values dataframe pandas
我使用此 lambda 函数从数据框中获取所有不同值的概述:
overview = df.apply(lambda col: col.unique())
Run Code Online (Sandbox Code Playgroud)
它返回所需的结果,如下所示:
ColA [1,2,3,...]
ColB [4,5,6,7,8,9...]
ColC [A,B,C]
... ...
Run Code Online (Sandbox Code Playgroud)
如何使用子图/多个条形图可视化此结果?
我的第一次尝试只是将对象扔进数据框的绘图方法中,这显然不起作用。所以我尝试从对象中创建一个数据框:
overview = {}
for attr, value in overview.iteritems():
overview[attr] = value
df = pd.DataFrame(overview)
Run Code Online (Sandbox Code Playgroud)
输出是:
ValueError: arrays must all be same length
Run Code Online (Sandbox Code Playgroud)
所以我尝试使用一个列表:
overview = []
for attr, value in obj_overview.iteritems():
overview.append({attr: value})
df = pd.DataFrame(overview)
Run Code Online (Sandbox Code Playgroud)
但结果是一个交叉矩阵,其行数与列数相同,并且第 n 行引用第 n 列。这也是错误的。
如何使用显示数据框不同值的多个条形图/子图来获得概览?
事实上,我想实现两个可能的目标:
谢谢!
通过以下方式单独绘图value_counts:
import pandas as pd
from matplotlib import pyplot as plt
df = pd.DataFrame({'ColA': [1, 2, 4, 4, 5],
'ColB': [4, 4, 6, 6, 6],
'ColC': ['A', 'C', 'C', 'E', 'E']})
for col in df:
df[col].value_counts().sort_index().plot(kind='bar', rot=0, ylabel='count')
plt.show()
Run Code Online (Sandbox Code Playgroud)
import pandas as pd
from matplotlib import pyplot as plt
df = pd.DataFrame({'ColA': [1, 2, 4, 4, 5],
'ColB': [4, 4, 6, 6, 6],
'ColC': ['A', 'C', 'C', 'E', 'E']})
overview = df.melt()
overview = pd.crosstab(overview['variable'], overview['value'])
ax = overview.plot(kind='bar', stacked=True, rot=0, ylabel='count')
ax.legend(bbox_to_anchor=(1.2, 1))
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4156 次 |
| 最近记录: |