如何使用熊猫中的datetime列创建数据透视表

时间:2019-10-20 17:48:17

标签: python pandas

我有一个想要更改的datetime列和value列。目标是为每个月创建一列,并为每个月创建一个显示平均值的行。

import pandas as pd
import numpy as np
import calendar

d = dict(enumerate(calendar.month_abbr))

rng = pd.date_range('2019-01-01', periods=365, freq='D')
df= pd.DataFrame({'Date': rng, 'Val': np.random.randint(10, size=365)}) 
df.set_index('Date', inplace=True)

df = df.resample('1M').mean().reset_index()
df['Month'] = df['Date'].apply(lambda x: d[x.month])

df.pivot(columns='Month', values='Val')

输出应为12列1月,2月,3月等...和1行,这是每个月的平均值。

2 个答案:

答案 0 :(得分:1)

改为使用pd.pivot_table:

import pandas as pd
import numpy as np
import calendar

d = dict(enumerate(calendar.month_abbr))

rng = pd.date_range('2019-01-01', periods=365, freq='D')
df= pd.DataFrame({'Date': rng, 'Val': np.random.randint(10, size=365)}) 
df.set_index('Date', inplace=True)

df = df.resample('1M').mean().reset_index()
df['Month'] = df['Date'].apply(lambda x: d[x.month])

pd.pivot_table(data=df,columns='Month', values='Val', aggfunc=np.mean)

输出:

Month  Apr       Aug       Dec       Feb       Jan       Jul       Jun  \
Val    3.2  4.419355  4.548387  5.857143  5.322581  4.354839  5.033333   

Month       Mar       May       Nov       Oct  Sep  
Val    4.645161  4.193548  4.966667  3.645161  3.7  

答案 1 :(得分:0)

强制 PortfolioReturn PortfolioRisk 1 0.275 0.4355 2 0.270 0.3772 3 0.265 0.3245 4 0.260 0.2774 5 0.255 0.2359 6 0.250 0.2000 7 0.245 0.1697 8 0.240 0.1451 9 0.235 0.1260 10 0.230 0.1126 11 0.225 0.1048 12 0.220 0.1026 13 0.215 0.1060 14 0.210 0.1151 15 0.205 0.1297 16 0.200 0.1500 17 0.195 0.1759 18 0.190 0.2074 19 0.185 0.2445 20 0.180 0.2872 21 0.175 0.3355 到所有df.index,并用0调用pivot命令

reindex

或者直接做一线客

df.index = [0]*df.index.size    
df_out = df.pivot(columns='Month', values='Val').reindex(columns=df.Month)

如果您不想如上所述更改df_out = (df.set_index(np.array([0]*df.index.size)) .pivot(columns='Month', values='Val').reindex(columns=df.Month)) Out[88]: Month Jan Feb Mar Apr May Jun Jul Aug \ 0 4.290323 3.75 4.032258 4.033333 4.225806 4.4 4.774194 4.774194 Month Sep Oct Nov Dec 0 4.6 4.16129 4.233333 3.935484 ,则可以将df.indexpivotffillbfill一起使用

iloc