仅当值存在时才重新采样数据

f2uvfpb9  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(144)

作为PD进口Pandas

data = {'time': ['09:30:00',
                 '09:31:00',
                 '09:37:00',
                 '09:38:00',
                 '09:39:00',
                 '09:40:00',
                 '09:46:00',
                 '09:47:00',
                 '09:48:00'],
         'sum': [5, 8, 5, 10, 15, 2, 0, 0, 0]}
my_index = pd.MultiIndex.from_arrays([["A"]*6 + ["B"]*3, [1, 1, 1, 2, 2, 2, 1, 1, 1]], names=["ID-A", "ID-B"])
df = pd.DataFrame(data, index=my_index)

如果我使用sum()每隔3分钟重新采样一次,即->
Data=data.set_index(‘time’).groupby([‘ID-A’,‘ID-B’]).resample(‘3min’).sum()
有一个窗口({9:33-9:36},{9:42-9:45})的sum()结果为0。我的 Dataframe 中有一些值实际上计算为0,即使在时间窗口可用之后(9:45-9:48)也是如此。我不希望在没有可用的数据的情况下对时间窗口进行重新采样。我想找出我的总和是0的窗口,但由于重新采样,我的数据中出现了虚假的0,因为这些时间没有可用的数据。

zbdgwd5y

zbdgwd5y1#

sum中使用min_count=1参数,然后删除缺少的值:

df['time'] = pd.to_timedelta(df['time'])

df = df.resample('3Min', on='time').sum(min_count=1).dropna()
print (df)
                  sum
time                 
0 days 09:30:00  13.0
0 days 09:36:00  15.0
0 days 09:39:00  17.0
0 days 09:45:00   0.0
0 days 09:48:00   0.0

详情

print (df.resample('3Min', on='time').sum(min_count=1))
                  sum
time                 
0 days 09:30:00  13.0
0 days 09:33:00   NaN
0 days 09:36:00  15.0
0 days 09:39:00  17.0
0 days 09:42:00   NaN
0 days 09:45:00   0.0
0 days 09:48:00   0.0

编辑:每组解决方案:

df['time'] = pd.to_timedelta(df['time'])

data = (df.reset_index()
          .set_index('time')
          .groupby(['ID-A','ID-B'])['sum']
          .resample('3min')
          .sum(min_count=1)
          .dropna())
print (data)
ID-A  ID-B  time           
A     1     0 days 09:30:00    13.0
            0 days 09:36:00     5.0
      2     0 days 09:38:00    27.0
B     1     0 days 09:46:00     0.0
Name: sum, dtype: float64

相关问题