Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用matplotlib或Seaborn绘制组条形图,并使用Python中的Datetime索引_Python_Pandas_Dataframe_Matplotlib_Seaborn - Fatal编程技术网

使用matplotlib或Seaborn绘制组条形图,并使用Python中的Datetime索引

使用matplotlib或Seaborn绘制组条形图,并使用Python中的Datetime索引,python,pandas,dataframe,matplotlib,seaborn,Python,Pandas,Dataframe,Matplotlib,Seaborn,我有一个由日期列和感兴趣的类别列组成的熊猫数据框架。我想看看每个月的频率计数。当我用matplotlib做这件事时,我得到了一些看起来很糟糕的东西 以下是按月份分组时框架的外观: df.resample("M")["category_col"].value_counts(normalize=True).mul(100) Output date category_col 2019-12-31 A 41.

我有一个由日期列和感兴趣的类别列组成的熊猫数据框架。我想看看每个月的频率计数。当我用matplotlib做这件事时,我得到了一些看起来很糟糕的东西

以下是按月份分组时框架的外观:

df.resample("M")["category_col"].value_counts(normalize=True).mul(100)

Output

date                         category_col      
2019-12-31  A                41.929004
            B                25.758765
            C                17.752111
            D                9.189919
            E                3.625122
            F                1.745080
2020-01-31  A                54.052744
            C                16.347271
            B                14.414431
            D                11.677537
            E                2.675607
            F                0.832411
2020-02-29  A                48.928468
            D                22.011116
            C                14.084507
            C                11.729162
            E                2.193272
            F                1.053475
2020-03-31  A                54.435410
            D                15.718065
            C                14.577060
            B                11.335682
            E                2.884205
            F                1.049578
Name: category_col, dtype: float64
这是我的尝试

df.date = pd.to_datetime(df.date)
df.set_index("date", inplace=True)
df.resample("M")["category_col"].value_counts(normalize=True).mul(100).plot(kind="bar")
请参见下面的输出:

以下是我想要的:

我想您需要对datetimes的rormat
月名年份进行
重命名:

df.date = pd.to_datetime(df.date)
df = df.set_index("date")

s = df.resample("M")["category_col"].value_counts(normalize=True).mul(100)

s.unstack().rename(lambda x: x.strftime('%B %Y')).plot(kind="bar")
样本:

print (s)
date        category_col
2019-12-31  A               41.929004
            B               25.758765
            C               17.752111
            D                9.189919
            E                3.625122
            F                1.745080
2020-01-31  A               54.052744
            C               16.347271
            B               14.414431
            D               11.677537
            E                2.675607
            F                0.832411
2020-02-29  A               48.928468
            B               22.011116
            C               14.084507
            D               11.729162
            E                2.193272
            F                1.053475
2020-03-31  A               54.435410
            D               15.718065
            C               14.577060
            B               11.335682
            E                2.884205
            F                1.049578
Name: A, dtype: float64



首先,要获取月份名称,请重置索引并选择正确的列:

df['month'] = df['date'].apply(lambda x: pd.Timestamp(x).strftime('%B'))

df = df.reset_index()

df = df[['month','category_col','value]]
然后,假设您有一个数据帧(称为df),如下所示:

month       category_col     value      
September   A                41.929004
September   B                25.758765
使用Seaborn执行以下操作以获取要查找的绘图:

import seaborn as sns 
ax = sns.barplot(x="month", y="value", hue="category_col", data=df)

这很有效。但条形图没有排序,日期显示为2020-01-31、2020-02,31。如何将它们更改为1月、2月等?在我从datetime导入datetime并应用上述内容后,我得到了以下错误:
AttributeError:'str'对象没有属性'strftime'
@A.JT-它们没有丢失
df.date=pd.to_datetime(df.date)df=df.set_index(“date”)
?是的,它是一个datetime@A.JT-什么是
打印(s.unstack().index)
month       category_col     value      
September   A                41.929004
September   B                25.758765
import seaborn as sns 
ax = sns.barplot(x="month", y="value", hue="category_col", data=df)