在每个数据集中创建包含3组数据的图形

时间:2018-03-27 10:03:21

标签: python pandas

我正在使用包含以下数据的CSV文件,我已将其转换为数据集。我到目前为止的代码:

List<ListBoxArticle> check = new List<ListBoxArticle>();          
private void SelectArt_Checked(object sender, RoutedEventArgs e)
{
    check.AddRange(LesArticles.Where(x => x.IsChecked)); 
}

我想要做的是将其转换为列图,每个数据集以年份(2015年,2010年,2005年和2000年)分隔,但在这些年份组中,他们有3列两性,男性和女性。如果数据集中只有两组数据,那么我很熟悉创建列图(例如,如果这只有性别和男性)。

这是我试图使用的代码:

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]}

运行代码时出现错误“Year”,这是可以理解的。我把色调留作“国家”,但一旦我弄清楚如何做到这一点就会改变。

问题:当我的每个数据集包含三个数据点时,如何创建列图? 我检查过Python API,但是找不到类似的问题。

1 个答案:

答案 0 :(得分:2)

对于3列DataFrame,我认为需要melt

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)