我有一个包含两列的半小时数据框。我想占用一天中的所有时间,然后进行一些计算,返回一个数字并将其分配给当天的所有半小时。下面是一个示例代码:
dates = pd.date_range("2003-01-01 08:30:00","2003-01-05",freq="30min")
data = np.transpose(np.array([np.random.rand(dates.shape[0]),np.random.rand(dates.shape[0])*100]))
data[0:50,0]=np.nan # my actual dataframe includes nan
df = pd.DataFrame(data = data,index =dates,columns=["DATA1","DATA2"])
print(df)
DATA1 DATA2
2003-01-01 08:30:00 NaN 79.990866
2003-01-01 09:00:00 NaN 5.461791
2003-01-01 09:30:00 NaN 68.892447
2003-01-01 10:00:00 NaN 44.823338
2003-01-01 10:30:00 NaN 57.860309
... ... ...
2003-01-04 22:00:00 0.394574 31.943657
2003-01-04 22:30:00 0.140950 78.275981
然后我想应用以下返回一个数字的函数:
def my_f(data1,data2):
y = data1[data2>20]
return np.median(y)
此函数根据条件(DATA2>20)选择 DATA1 中的所有数据,然后取所有这些数据的中值。如何创建第三列(比如说结果)并为当天的所有半小时数据分配回这个固定数字(y)?
我的猜测是我应该使用这样的东西:
daily_tmp = df.resample('D').apply(my_f)
df['results'] = b.reindex(df.index,method='ffill')
如果这种方法是正确的,我如何将带有两个参数的 my_f 传递给 resample.apply()?或者有没有其他方法可以完成类似的任务?