[英]How to create a pivot table on pandas DATE column and calculate time difference?
[英]How to create a pivot table using a datetime column in pandas
我有一個日期時間列和值列,我想要 pivot。 目標是為每個月創建一個列,並為每個月創建一個顯示平均值的行。
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')
output 應該是 12 列 Jan、Feb、Mar 等......和 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)
output:
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.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.index
,您可以只使用pivot
和ffill
, bfill
和iloc
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.