Python 如何使用数据库中的datetime列创建透视表
我有一个datetime列和value列,我想对其进行透视。目标是为每个月创建一列,并创建一行,显示每个月的平均值 作为pd进口熊猫 将numpy作为np导入 导入日历 d=日历月 rng=pd.日期\u范围'2019-01-01',期间=365,频率'D' df=pd.DataFrame{'Date':rng'Val':np.random.randint10,size=365} df.set_索引'Date',in place=True df=df.重新采样'1M'。平均值.重置索引 df['Month']=df['Date'].applylambda x:d[x.Month] df.pivotcolumns='Month',values='Val'Python 如何使用数据库中的datetime列创建透视表,python,pandas,Python,Pandas,我有一个datetime列和value列,我想对其进行透视。目标是为每个月创建一列,并创建一行,显示每个月的平均值 作为pd进口熊猫 将numpy作为np导入 导入日历 d=日历月 rng=pd.日期\u范围'2019-01-01',期间=365,频率'D' df=pd.DataFrame{'Date':rng'Val':np.random.randint10,size=365} df.set_索引'Date',in place=True df=df.重新采样'1M'。平均值.重置索引 df['
输出应为1月、2月、3月等12列。。。和1行,即每个月的平均值。改用pd.pivot\u表:
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
强制df.index全部为0,并使用reindex调用pivot命令
还是直航一班
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.index,可以将pivot与ffill、bfill和iloc一起使用
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_out = (df.pivot(columns='Month', values='Val').ffill().bfill().iloc[[0]]
.reindex(columns=df.Month))
Out[99]:
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