假设我有这样一个数据帧:
date M1_start M1_end SimPrices_t0_exp
0 2017-12-31 2018-01-01 2018-01-31 16.151667
1 2018-01-01 2018-02-01 2018-02-28 45.138445
2 2018-01-02 2018-02-01 2018-02-28 56.442648
3 2018-01-03 2018-02-01 2018-02-28 59.769931
4 2018-01-04 2018-02-01 2018-02-28 50.171695
我想得到SimPrices,to,exp观测值的平均值,每个观测值的'date'值在M1,start和M1,end之间
我试过这个
mask = ((df['date'] >= df['M1_start']) & (df['date'] <= df['M1_end']))
df['mymean'] = df['SimPrices_t0_exp'][mask].mean()
不管怎样,每次观察都返回NaN,我相信是因为掩码应用于每一行,单独检查掩码条件,以确定它自己的日期,这永远不会返回true。你知道吗
有人能帮我吗?我已经为这个问题挣扎了两天了
示例:对于第一次观察,结果列在第一次观察时的平均值为45.13,56.44,59.76,50.17(在这种特殊情况下)
如果它对某人有帮助,伪代码应该是这样的:
for obs in observations:
start = obs.start
end = obs.end
sum = 0
obs_count = 0
for obs2 in observations:
if obs2.date >= start and obs2.date <= end:
sum += obs.SimPrices_t0_exp
obs_count += 1
obs.mean = sum/obs_count
谢谢!!你知道吗
在这里,一种方法是使用笛卡尔合并(对于大型数据集来说不是一个好的选择)、过滤和
groupby
:输出:
相关问题 更多 >
编程相关推荐