我正在尝试使用 pandas 将 15 分钟的时间段重新采样为 1 小时的时间段,但通过应用自定义函数。我的 DataFrame 是这种格式;
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))
或者通过set_index
将Date
设置为index
:
df.set_index('Date', inplace=True)
print (df.resample('1H').apply(log_add))
同时首先检查 Date
列的 dtype
是否为 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
关于python - Pandas 重采样应用自定义功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41300653/