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

时间:2018-01-11 16:11:30

标签: python pandas matplotlib

我正在尝试使用pandas实现以下情节或表:

enter image description here

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

    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

谢谢!

2 个答案:

答案 0 :(得分:3)

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)

输出: enter image description here

在几个月内获得订购的一种方法是添加辅助列级别并允许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)

输出: enter image description here

已更新以添加总计列。

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

enter image description here

答案 1 :(得分:0)

假回报:

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()
相关问题