【问题标题】:How to pivot a vector in Python如何在 Python 中旋转矢量
【发布时间】:2019-10-15 14:00:32
【问题描述】:

我有以下示例数据框:

index = pd.date_range('1/1/2020', periods=8760, freq='H')
df = pd.Series(range(8760), index=index)

我想要做的是有一个新的数据框,对于列,它将有天数,从 1 到 31,对于行,它将有所有月份,从第一个可用月份开始,从 df 到最后一个可用。它也应该有几个月,即使它们不包含在 df 中。

输出应该是这样的:

在单元格中,结果应该是平均值或总和值。

例如,第一个单元格 (01-20,1) 应该具有第一个月第一天的所有值的平均值,最后一列和最后一个单元格 (12-20,31) 应该具有平均值该月最后一天的所有值,等等。

我尝试与 groupby 合作,但没有任何运气。

【问题讨论】:

  • 你能添加预期的输出吗?

标签: python pandas pivot-table


【解决方案1】:

你想要pivot_tabledaysmonths

# your data is a series, we turn it to a dataframe
df = df.to_frame(name='values')

# create days and months
df['days'] = df.index.day
df['months'] = df.index.to_period('M')

# since your data is hourly, I just take daily mean:
df.pivot_table(columns='days', 
               index='months', 
               values='values', 
               aggfunc='mean')

您也可以使用groupby 而不将系列转换为帧:

(df.groupby([df.index.day, df.index.to_period('M')])
   .mean()
   .unstack(0)
)

【讨论】:

  • 我在回答这个问题时分心了,然后回来寻找你的答案。完美的!很好地使用to_period,因为这并不明显,但我认为这是正确的选择。
猜你喜欢
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 2012-08-08
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多