【发布时间】:2017-05-24 11:42:53
【问题描述】:
为了这个问题,我有一个以下结构的数据框:
Date A B
2016/1/1 nan nan
2016/1/2 nan nan
2016/1/3 3 2
2016/1/4 4 1
2016/1/5 nan nan
2016/1/6 6 8
2016/1/7 7 nan
2016/1/8 8 3
2016/1/9 9 5
我想做的是创建一个 3 天的分箱平均值,我可以很容易地使用
df = df.resample('3D', on='Date').mean()
但是使用这种方法,nan 值被计为零值,它们会影响平均值,如下所示:
Date A B
2016/1/1 nan nan
2016/1/2 nan nan
2016/1/3 3 2
使用df.resample('3D', on='Date').mean() 返回:
Date A B
2016/1/3 1 2/3
我希望在哪里获得:
Date A B
2016/1/3 3 2
计算时忽略 na 值。
根据 .mean() 上的文档,我应该能够跳过页面上列出的值:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.mean.html#pandas.Series.mean
但是当我运行以下命令时:
df = df.resample('3D', on='Date').mean(skipna=True)
返回如下:
UnsupportedFunctionCall: numpy operations are not valid with resample. Use .resample(...).mean() instead
如何解决这个错误并产生我想要的正确平均值?
【问题讨论】:
-
我认为有一些问题,因为
df1 = df.resample('3D', on='Date').mean()我得到df1 = pd.DataFrame({'A': [3.0, 5.0, 8.0], 'B': [2.0, 4.5, 4.0]}, index=pd.to_datetime(['2016-01-01', '2016-01-04', '2016-01-07'])) -
所以所有
NaNs 值都被排除在均值计数之外。 -
是的,这是正确的,平均值的计数受 NaN 值的影响,因此我正在寻找排除它们的方法。
Cumsum和cumcount看起来可行,但我不确定如何通过重新采样在单行上实现它。 -
嗯,有点不同。我试着检查一下。
标签: python pandas dataframe nan binning