Python 在每个数据集中创建包含3组数据的图形
我正在使用一个CSV文件,该文件包含以下数据,我已将其转换为数据集。到目前为止,我掌握的代码是:Python 在每个数据集中创建包含3组数据的图形,python,pandas,Python,Pandas,我正在使用一个CSV文件,该文件包含以下数据,我已将其转换为数据集。到目前为止,我掌握的代码是: import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df = pd.read_csv('MH_12.csv') df = df.set_index("Country") df2 = df.loc["Colombia", "2005"] print(df2
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('MH_12.csv')
df = df.set_index("Country")
df2 = df.loc["Colombia", "2005"]
print(df2.values)
Dataset2015 = {"Both sex":[ 7.1],
"Male" :[10.9],
"Female" :[ 3.1]}
Dataset2010 = {"Both sex":[ 7.0],
"Male" :[11.1],
"Female" :[ 2.8]}
Dataset2005 = {"Both sex":[ 7.3],
"Male" :[11.7],
"Female" :[ 2.6]}
Dataset2000 = {"Both sex":[ 6.7],
"Male" :[10.9],
"Female" :[ 2.3]}
我想做的是将其转换为柱状图,每个数据集按年份(2015年、2010年、2005年和2000年)分开,但在这些年份组中,它们有3列,分别为性别、男性和女性。如果数据集中只有两组数据(例如,如果只有性别和男性),我熟悉创建列图
这是我尝试使用的代码:
df3 = pd.DataFrame(Dataset2015)
df3['year'] = '2015'
df4 = pd.DataFrame(Dataset2010)
df4['year'] = '2010'
df5 = pd.DataFrame(Dataset2005)
df5['year'] = '2005'
df6 = pd.DataFrame(Dataset2000)
df6['year'] = '2000'
df7 = pd.concat([df3,df4,df5,df6])
sns.factorplot(errcolor=".2", edgecolor=".2", data = df, hue='country', x='year', y='Mental Health Issues per 100,000 Population', kind='bar', ci=None, aspect=3, size=7);
plt.title('Mental Health Issues in Colombia')
plt.xticks(rotation=45);
plt.show()
我在运行代码时得到一个错误“Year”,这是可以理解的。我将色调保留为“国家”,但一旦我找到正确的方法,色调就会改变
问题:当我的每个数据集包含三个数据点时,如何创建柱状图?
我已经检查了Python API,没有找到类似的问题。我认为需要3列DataFrame
:
df8 = df7.melt('year', var_name='sex', value_name='a')
print (df8)
year sex a
0 2015 Both sex 7.1
1 2010 Both sex 7.0
2 2005 Both sex 7.3
3 2000 Both sex 6.7
4 2015 Female 3.1
5 2010 Female 2.8
6 2005 Female 2.6
7 2000 Female 2.3
8 2015 Male 10.9
9 2010 Male 11.1
10 2005 Male 11.7
11 2000 Male 10.9
sns.factorplot(errcolor=".2",
edgecolor=".2",
data = df8,
hue='sex',
x='year',
y='a',
kind='bar',
ci=None,
aspect=3,
size=7)
嗨,耶兹雷尔,这正是我需要的。它工作得很好。再次感谢你!看起来这是一个非常简单的过程@詹姆斯武-不客气!是的,
melt
在这里工作很好。