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),然后打电话给minmax吗? Do'h,是的,这实际上应该有效。我被赶上了,因为我需要保留 15m dat 值,因为它们实际上是 nd 数组的索引位置。谢谢 【参考方案1】:

我认为您可以将resampleResampler.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 切片和选择的主要内容,如果未能解决你的问题,请参考以下文章

切片 Pandas Dataframe 时如何返回索引

pandas常用

如何按位置对 Pandas 数据框进行切片?

带有迭代的 Pandas DataFrame 切片

Python pandas 按多个索引范围切片数据帧

Pandas 使用切片和整数索引选择列