我正在尝试使用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
谢谢!
答案 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)
在几个月内获得订购的一种方法是添加辅助列级别并允许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])
答案 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()