繁体   English   中英

如何在大熊猫的X轴上绘制Y轴和月份的年份?

[英]How to make a years on Y axis and months on X axis plot with pandas?

我试图用熊猫实现以下情节或表格:

在此输入图像描述

这是我的数据(数字不会与照片上的内容相加):

    TIME_COL    TXT_COL
0   1/2/2017    text
1   1/3/2017    text
2   1/5/2017    text
3   1/2/2017    text
4   7/2/2017    text
5   12/2/2017   text
6   9/2/2017    text

任何人都可以帮我解决以下问题:1。安排/重塑数据的正确方法是什么? 2.如何处理它的视觉方面,以达到与照片中显示的相同或相似的结果?

我已经有了一些代码可以帮助我每月对数据进行分组,但这并不是我想要的。 这是我的分组代码:

df = pd.read_csv('some_file.csv')
df = df[['TIME_COL', 'TXT_COL']]
df['TIME_COL'] = pd.to_datetime(df['TIME_COL'])
df.index = pd.to_datetime(df['TIME_COL'], unit='s') # convert to datetime index
df = d['TXT_COL'].resample('M', how='count')

打印出以下形式的东西:

TIME_COL
2016-09-30      5
2016-10-31      7
2016-11-30      0
2016-12-31     2
2017-01-31     5
2017-02-28     2
2017-03-31    11
2017-04-30    10
2017-05-31    10
2017-06-30     7
2017-07-31     7
2017-08-31     8
2017-09-30     6
2017-10-31     7
2017-11-30     2
2017-12-31     4
2018-01-31     7

谢谢!

IIUC,你可以这样做:

df['Year'] = df.index.year

df['Month'] = df.index.strftime('%b')

df.pivot_table('TIME_COL','Year','Month', aggfunc='mean', fill_value=0).style.bar(axis=1)

输出: 在此输入图像描述

获得几个月订购的一种方法是添加一个辅助列级别,并允许pivot_table进行排序,然后像这样删除该级别。

df['Year'] = df.index.year

df['Month'] = df.index.strftime('%b')
df['MonthNo'] = df.index.month

df_pvt = df.pivot_table(values='TIME_COL',index='Year',columns=['MonthNo','Month'], aggfunc='mean', fill_value=0)
df_pvt.columns = df_pvt.columns.droplevel(0)
df_pvt.style.bar(axis=1)

输出: 在此输入图像描述

已更新以添加总计列。

df['Year'] = df.index.year

df['Month'] = df.index.strftime('%b')
df['MonthNo'] = df.index.month

df_pvt = df.pivot_table(values='TIME_COL',index='Year',columns=['MonthNo','Month'], aggfunc='mean', fill_value=0)
df_pvt.columns = df_pvt.columns.droplevel(0)
df_pvt = pd.concat([df_pvt,df_pvt.sum(1).rename('Total')],axis=1)
df_pvt.style.bar(axis=1,subset=df_pvt.columns[:-1])

在此输入图像描述

假回报:

range_ = pd.date_range(start='2015-01-01', end='2017-12-31', freq='D')
df = pd.DataFrame({'returns': np.random.randn(len(range_))}, index=range_)

添加年份和月份列:

df['year'] = df.index.year
df['month'] = df.index.month
monthly_returns = df.groupby(['year', 'month']).sum()
monthly_returns.unstack()

这会给你一个像这样的表:

month      1    2    3    4     5    6    7    8    9    10    11   12
year                                                                  
2015     -4.2  4.7  2.5  4.9   4.4  6.9 -2.5  8.8  5.5  0.5  -5.5 -1.6
2016     10.5  1.1  1.6  1.0   9.9  0.2 -0.1  2.1  4.3 -1.5  10.8  2.5
2017      2.8 -9.8  4.9  7.4  14.8  2.5 -6.2  4.1 -0.9  0.3   7.4  1.0

然后你可以用它绘制它:

import matplotlib.pyplot as plt
plt.imshow(you_matrix_of_returns, cmap='hot', interpolation='nearest')
plt.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM