Python groupby重采样的数据帧ewm
我有如下数据 有可能得到如下的指数加权平均值吗?下面的代码抛出错误Python groupby重采样的数据帧ewm,python,pandas,dataframe,Python,Pandas,Dataframe,我有如下数据 有可能得到如下的指数加权平均值吗?下面的代码抛出错误 df.groupby(['name']).resample('1s')['value'].ewm(span=1).mean() 首先,您必须确保数据帧索引是一个时间序列。使用: df.index = pd.to_datetime(df['time'], format='%H:%M:%S') 然后将代码修改为: df.groupby(['name']).resample('1s')['value'].ffill().ewm(
df.groupby(['name']).resample('1s')['value'].ewm(span=1).mean()
首先,您必须确保数据帧索引是一个时间序列。使用:
df.index = pd.to_datetime(df['time'], format='%H:%M:%S')
然后将代码修改为:
df.groupby(['name']).resample('1s')['value'].ffill().ewm(span=1).mean()
调用ewm()
之前添加ffill()
,以便将DatetimeIndexResamplerGroupby
对象转换为DataFrame对象,然后可以使用ewm()
函数
测试代码和输出:
data = {'time': ['0:00:02', '0:00:04', '0:00:06', '0:00:08'], 'name': ['n1', 'n2', 'n1', 'n2'], 'value': [10, 1000, 20, 1500]}
df = pd.DataFrame(data)
df.index = pd.to_datetime(df['time'], format='%H:%M:%S')
df.groupby(['name']).resample('1s')['value'].ffill().ewm(span=1).mean()
name time
n1 1900-01-01 00:00:02 10.0
1900-01-01 00:00:03 10.0
1900-01-01 00:00:04 10.0
1900-01-01 00:00:05 10.0
1900-01-01 00:00:06 20.0
n2 1900-01-01 00:00:04 1000.0
1900-01-01 00:00:05 1000.0
1900-01-01 00:00:06 1000.0
1900-01-01 00:00:07 1000.0
1900-01-01 00:00:08 1500.0
Name: value, dtype: float64