【问题标题】:grouped by rolling means pandas按滚动方式分组熊猫
【发布时间】:2018-09-30 08:42:43
【问题描述】:

我需要计算按天分组的数据的滚动平均值。

ID  BC_DT       BB_3M_DEFAULT_PROB  REGION
AA  27-Mar-18   0                   Chicago
BB  27-Mar-18   0.000002            Chicago
CC  27-Mar-18   0.000003            Chicago
DD  27-Mar-18   0.000006            Chicago
AA  28-Mar-18   0                   Dallas
BB  28-Mar-18   0                   New York
CC  28-Mar-18   0.000005            Chicago
DD  28-Mar-18   0.000004            Kansas City
AA  29-Mar-18   0.000002            Chicago
BB  29-Mar-18   0.000002            Chicago
CC  29-Mar-18   0.000002            Kansas City
DD  29-Mar-18   0.000005            Chicago
AA  30-Mar-18   0.000002            Kansas City
BB  30-Mar-18   0.019309            New York
CC  30-Mar-18   0.000004            Dallas
DD  30-Mar-18   0.000007            Chicago
AA  31-Mar-18   0.000002            Dallas
BB  31-Mar-18   0.000003            Dallas

#Set BC_DT to datetime format.
df_0['BC_DT'] = pd.to_datetime(df_0['BC_DT'])
#Set BC_DT to be index.
df_1 = df_1.set_index('BC_DT')
#Sort index so we're in chronological order.
df_1 = df_1.sort_index(axis=0, ascending=True)
#Calculate a daily mean grouping by day.
df_1['3M_DailyMean'] = df_1.groupby(df_1.index)['BB_3M_DEFAULT_PROB'].mean()

这就是我被绊倒的地方。

df_1['3M_SMA'] = df_1.groupby(df_1.index)['BB_3M_DEFAULT_PROB'].rolling(10, center=False).mean().reset_index(0, drop=True)

我正在尝试按日期分组,然后创建一个跨度为 10 天的滚动平均值。有人看到我在哪里绊倒了吗?

我预计滚动平均值会在几天内运行,因此每个日期都应该具有相同的“平均值”。

2017-01-01         NaN
2017-01-02         NaN
2017-01-02         NaN
2017-01-02         NaN
2017-01-02         NaN
2017-01-02         NaN
2017-01-02         NaN
2017-01-02         NaN
2017-01-02         NaN
2017-01-02         NaN
2017-01-02    0.001851
2017-01-02    0.001592
2017-01-02    0.001592
2017-01-02    0.001593
2017-01-02    0.001592
2017-01-02    0.001592
2017-01-02    0.001592
2017-01-02    0.000003
2017-01-02    0.000005
2017-01-02    0.000005
2017-01-02    0.000005
2017-01-02    0.000004
2017-01-02    0.000004

【问题讨论】:

  • tripped up 是什么意思?告诉我们,你期望得到什么输出。
  • 谢谢,我看到了预期的输出,但您能否提供输入,您想从中获得该输出。

标签: python pandas


【解决方案1】:

尝试创建一个新的数据框并尝试使用 pd.TimeGrouper。

# index is a datetime
df.set_index('BC_DT', inplace=True)

# group by day
groups  = df.groupby(pd.TimeGrouper('D'))

# new dataframe
df2 = pd.DataFrame()

# dataframe with days and sum of 'BB_3M_DEFAULT_PROB' per day
df2['daily_sum'] = groups['BB_3M_DEFAULT_PROB'].sum()

# add rolling mean to dataframe
df2['rolling_mean'] = df2['BB_3M_DEFAULT_PROB'].rolling(10,center=False).mean()

【讨论】:

猜你喜欢
  • 2016-02-20
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2022-01-16
  • 1970-01-01
  • 2021-01-18
  • 2021-11-11
相关资源
最近更新 更多