pandas timeseries DF 切片和选择
Posted
技术标签:
【中文标题】pandas timeseries DF 切片和选择【英文标题】:pandas timeseries DF slice and selection 【发布时间】:2017-03-10 04:49:15 【问题描述】:我有一个 df 的时间序列索引,频率为 15 分钟,持续了 10 年:
dat
2004-04-07 00:00:00 4.0
2004-04-07 00:15:00 1.0
2004-04-07 00:30:00 2.0
我需要能够每天(0-24 小时)提取最小和最大“dat”值并将它们附加到单独的列表中。
我的计划是使用日期时间索引并循环遍历:
days = pd.to_datetime(pd.date_range(start = s, end = e, freq='1d'), format='%Y%m%d')
for day in days:
mn.append(min(df.loc[day].dat))
但是,在“天”中创建的时间戳有小时(尽管格式),所以它每次只返回 00:00:00 小时值:
2004-04-07 00:00:00 4.0
mn[0] '4.0'
【问题讨论】:
你不能先resample('D)
,然后打电话给min
和max
吗?
Do'h,是的,这实际上应该有效。我被赶上了,因为我需要保留 15m dat 值,因为它们实际上是 nd 数组的索引位置。谢谢
【参考方案1】:
我认为您可以将resample
与Resampler.aggregate
一起使用:
df = df.resample('D').agg('dat': ['min','max'])
print (df)
dat
min max
2004-04-07 1.0 4.0
还有:
df = df.resample('D')['dat'].agg('min_dat': 'min', 'max_dat': 'max')
print (df)
max_dat min_dat
2004-04-07 4.0 1.0
如果需要创建列表,请使用tolist
:
Lmin = df.min_dat.tolist()
print (Lmin)
[1.0]
Lmax = df.max_dat.tolist()
print (Lmax)
[4.0]
【讨论】:
【参考方案2】:conversion = 'Low': 'min', 'High': 'max'
minmax= days.resample(rule='1D').apply(conversion)
【讨论】:
以上是关于pandas timeseries DF 切片和选择的主要内容,如果未能解决你的问题,请参考以下文章