熊猫重采样应用自定义函数?



我正在尝试使用 pandas 将 15 分钟周期重新采样为 1 小时周期,但通过应用自定义函数。我的数据帧采用此格式;

Date                      val1       val2                  
2016-01-30 07:00:00       49.0       45.0
2016-01-30 07:15:00       49.0       44.0
2016-01-30 07:30:00       52.0       47.0
2016-01-30 07:45:00       60.0       46.0
2016-01-30 08:00:00       63.0       61.0
2016-01-30 08:15:00       61.0       60.0
2016-01-30 08:30:00       62.0       61.0
2016-01-30 08:45:00       63.0       61.0
2016-01-30 09:00:00       68.0       60.0
2016-01-30 09:15:00       71.0       70.0
2016-01-30 09:30:00       71.0       70.0

..我想用这个函数重新采样;

def log_add(array_like):
return (10*math.log10((sum([10**(i/10) for i in array_like])))))

我愿意;

df.resample('1H').apply(log_add)

但这会返回一个空的 DF,这样做;

df.resample('1H').apply(lambda x: log_add(x))

也做同样的事情。有人知道为什么它不能正确应用该功能吗?

任何帮助将不胜感激,谢谢。

您可以在 0.19.0 pandas 中实现的内容on添加参数:

print (df.resample('1H', on='Date').apply(log_add))

或者Date设置为set_indexindex

df.set_index('Date', inplace=True)
print (df.resample('1H').apply(log_add))

还要首先检查列Datedtype是否datetime,如果不使用to_datetime

print (df.dtypes)
Date     object
val1    float64
val2    float64
dtype: object
df.Date = pd.to_datetime(df.Date)
print (df.dtypes)
Date    datetime64[ns]
val1           float64
val2           float64
dtype: object