Pandas抛出ValueError: cannot coerce to Series, length必须为1:给定21



我有一个熊猫数据框df。我要按id,typescenario分组。然后计算val列的滚动平均值,并使用结果计算另一个版本,如下所示:

period = 120
period_2 = 12
group = df.groupby(['id', 'type', 'scenario'], as_index=False)
df['val_rolmean'] = (group['val'].rolling(period_2*2, center=True, min_periods=1).mean() * 12).reset_index(level=0, drop=True)
df['val_rolmean2'] = (group['val_rolmean']/(group['rate'].shift(period).fillna(0) + 0.0050)).reset_index(level=0, drop=True)

但是它抛出了这个错误:

ValueError: cannot coerce to Series, length必须为1:给定219

我使用的是熊猫版本1.0.5

我不知道这是否符合你正在寻找的。

由于df可以包含分组列['id', 'type', 'scenario']的重复值,因此我创建了具有唯一值的数据框df_grouped

并将每个新的计算列添加到其中。

我删除了参数level=0,因为它在本例中不是必需的。

import pandas as pd
import numpy as np
df = pd.DataFrame(
np.random.randint(0,4,size=(1000, 5)), 
columns=['id', 'type', 'scenario', 'val', 'rate'])
period = 120
period_2 = 12
# Data Frame with unique lst_col_group values
lst_col_group = ['id', 'type', 'scenario']
mask = df[lst_col_group].drop_duplicates().index
df_grouped = df.loc[mask]
group = df.groupby(lst_col_group, as_index=False)
df_grouped['val_rolmean'] = (
group['val']
.rolling(period_2*2, center=True, min_periods=1)
.mean() * 12
).reset_index(drop=True)  # level=0 (it didn't work in this case)
df_grouped['val_rolmean2'] = (
df_grouped['val_rolmean']/(
df_grouped['rate'].shift(period).fillna(0) + 0.0050)
).reset_index(drop=True)  # level=0 (id didn't work in this case)
print(df_grouped.head())
#    id  type  scenario  val  rate  val_rolmean  val_rolmean2
# 0   3     3         3    3     1    20.000000   4000.000000
# 1   1     1         0    1     2    21.230769   4246.153846
# 2   1     3         1    0     1    19.714286   3942.857143
# 3   1     0         1    2     2    20.800000   4160.000000
# 4   2     2         3    3     0    19.500000   3900.000000

相关内容

最新更新