我有一个时间序列数据的CSV文件,它是一个标有oatSensor (外部空气温度传感器根据不同过程的条件过滤)的列,如果可能的话,我想找一种方法将数据以“每天”的方式存储。
例如,我可以用下面的代码来存储整个数据集。外部空气温度值的增量为-5至55。
import pandas as pd
df = pd.read_csv('ahu1OatFiltHourFilt.csv', index_col='Date', parse_dates=True)
df.describe()
cats = ['-5--1',
'0-4','5-9','10-14','15-19','20-24',
'25-29','30-34','35-39','40-44','45-49','50-54']
bins = [-5, 0,
5, 10, 15, 20, 25, 30, 35,
40, 45, 50, 55]
df2 = (df.groupby([df.index, pd.cut(df['oatSensor'], bins, labels=cats)])
.size()
.unstack(fill_value=0)
.reindex(columns=cats, fill_value=0))
df2.sum(axis = 0)它将输出以下内容:
oatSensor
-5--1 3
0-4 6
5-9 19
10-14 49
15-19 65
20-24 125
25-29 230
30-34 201
35-39 171
40-44 205
45-49 179
50-54 183
dtype: int64但最终我希望找到一种方法:
1)为每个bin类别cats df4 = pd.DataFrame(df2, columns=cats)创建单独的df列
2)为每个day的每个sum重新采样整个数据。
希望这样,我正在使用的数据在这个git回购中。
谢谢你的帮助。
编辑--如果我使用df3 = df2.stack() --这给了我想要的(除了重采样之外),但是我如何实现创建单独的cats数据格式,然后可以每天重放一笔数据呢?
Date oatSensor
2018-09-26 05:00:00 -5--1 0
0-4 0
5-9 0
10-14 0
15-19 0
20-24 0
25-29 0
30-34 0
35-39 0
40-44 0
45-49 0
50-54 1
2018-09-26 06:00:00 -5--1 0
0-4 0
5-9 0
10-14 0
15-19 0
20-24 0
25-29 0
30-34 0
35-39 0
40-44 0
45-49 0
50-54 1发布于 2019-07-16 22:32:23
我认为您想要的是一个数据,其中每一行都是您所描述的回收箱中观察到的数量的总和,并在观察进行的当天建立索引。
如果这是真的,那么我认为你是超级,超级亲密!
变化
df2 = (df.groupby([df.index, pd.cut(df['oatSensor'], bins, labels=cats)]) .size() .unstack(fill_value=0) .reindex(columns=cats, fill_value=0))
改为:
df2 = (df.groupby([df.index.date, pd.cut(df['oatSensor'], bins, labels=cats)]) .size() .unstack(fill_value=0) .reindex(columns=cats, fill_value=0))
更改是将.date添加到groupby中的第一个参数。这将给您提供数据,就像我前面描述的那样。
我不确定这是否符合您关于每个cat的单独数据格式的观点。通过我创建的dataframe,您可以为任何列创建一个新的df,只需:
df_cat = df2['-5--1']
发布于 2019-07-16 23:43:13
试试这段代码。祝你好运;)
import pandas as pd
distance = 5
url = 'https://raw.githubusercontent.com/bbartling/Data/master/ahu1OatFiltHourFilt.csv'
df = pd.read_csv(url)
df['Date'] = pd.to_datetime(df['Date'])
min = df.oatSensor.min()
max = df.oatSensor.max()
min = int(min - (min % distance))
max = int(max + distance - (max % distance))
labels = ["{0} - {1}".format(i, i + distance) for i in range(min, max,
distance)]
df['group'] = pd.cut(df.oatSensor, range(min, max + distance, distance),
right=False, labels=labels)
df2 = df.groupby(['group']).count()
df['one'] = 1
df3 = df.pivot_table('one','Date','group')
print(df3.tail())退出:
# group -5 - 0 0 - 5 5 - 10 ... 85 - 90 90 - 95 95 - 100
# Date ...
# 2019-07-06 13:00:00 NaN NaN NaN ... NaN NaN NaN
# 2019-07-06 14:00:00 NaN NaN NaN ... NaN NaN NaN
# 2019-07-06 15:00:00 NaN NaN NaN ... NaN NaN NaN
# 2019-07-06 16:00:00 NaN NaN NaN ... NaN NaN NaN
# 2019-07-09 15:00:00 NaN NaN NaN ... 1.0 NaN NaNhttps://stackoverflow.com/questions/57063396
复制相似问题