如何解决熊猫重新采样而不聚合
我已经尝试了很多找到一种方法,该方法允许我在没有任何聚合的情况下获取重采样或组的所有组,例如从:
import pandas as pd
import datetime
import numpy as np
fir_date=pd.to_datetime('1991/12/25')
days = pd.date_range(fir_date,fir_date + datetime.timedelta(100),freq='30T')
data=[]
for i in range(3):
np.random.seed(seed=i)
data.append(np.random.randint(1,high=100,size=len(days)))
df = pd.DataFrame({'Datetime': days,'feature1': data[0],'feature2': data[1],'feature3': data[2]})
df = df.set_index('Datetime')
df.index = df.index.map(lambda x: x.replace(second=0,microsecond=0))
我能够通过以下方式获得某个重采样的每一组:
df.resample('D').groups
> {Timestamp('1991-12-25 00:00:00',freq='D'): 48,> Timestamp('1991-12-26 00:00:00',freq='D'): 96,> Timestamp('1991-12-27 00:00:00',freq='D'): 144,> Timestamp('1991-12-28 00:00:00',freq='D'): 192,> Timestamp('1991-12-29 00:00:00',freq='D'): 240,...}
输出是一个字典,因此我可以通过以下方式访问特定元素:
df.resample('D').get_group('1991-12-25 00:00:00')
但这似乎不太聪明。
有更好的方法,例如,为每组重采样获取 1 个 DataFrame??
我知道可以将重采样循环为:
for i in df.resample('D'):
print(i)
break
但这不允许我比较不连续的组,或者至少不容易。
处理这个问题有什么好的技巧吗?
解决方法
将选择与 unique
结合使用
import pandas as pd
import datetime
import numpy as np
fir_date=pd.to_datetime('1991/12/25')
days = pd.date_range(fir_date,fir_date + datetime.timedelta(100),freq='30T')
data=[]
for i in range(3):
np.random.seed(seed=i)
data.append(np.random.randint(1,high=100,size=len(days)))
df = pd.DataFrame({'Datetime': days,'feature1': data[0],'feature2': data[1],'feature3': data[2]})
df['Days'] = df['Datetime'].dt.date # put in your resample step length here,e.g. days,month,...
df = df.set_index('Datetime')
df.index = df.index.map(lambda x: x.replace(second=0,microsecond=0))
for i in df['Days'].unique():
selection = df[df['Days'] = i]
,
如果需要数据帧列表,请使用列表理解:
dfs = [x for i,x in df.resample('D')]
如果需要字典可以将 resample
对象转换为 tuple
和 dict
:
d = dict(tuple(df.resample('D')))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。