为了账号安全,请及时绑定邮箱和手机立即绑定

Dataframe Groupby 和 Resample,每分钟添加缺失行

Dataframe Groupby 和 Resample,每分钟添加缺失行

紫衣仙女 2023-12-12 20:11:40
我想要一个简短的数据框:每分钟安排一次添加缺失分钟数的行(从 09:05 到 09:20)然后每 5 分钟重新采样一次time  cars     flow 0  9:07   737       In 1  9:06    22      Out 2  9:18    42       In 3  9:19    36  Unknown我尝试过的:data = {'time': ["9:07", "9:06", "9:18", "9:19"], 'cars' : [737,  22, 42,36],'flow': ["In","Out","In","Unknown"]}df = pd.DataFrame(data)idx = pd.date_range("9:05", "09:20", freq="1min")idx = idx.rename('time')df = df.set_index('time')df.index = pd.to_datetime(df.index)df = df.reindex(idx, fill_value=0)df = df.groupby('flow').resample('5T')['cars'].sum()     # how_many_volumeprint(df)它返回:flow     time               0        2020-10-21 09:05:00      0         2020-10-21 09:10:00      0         2020-10-21 09:15:00      0         2020-10-21 09:20:00      0In       2020-10-21 09:05:00    737         2020-10-21 09:10:00      0         2020-10-21 09:15:00     42Out      2020-10-21 09:05:00     22Unknown  2020-10-21 09:15:00     36但想要的是:In             2020-10-21 09:05:00    737               2020-10-21 09:10:00    0               2020-10-21 09:15:00    42               2020-10-21 09:20:00    0Out            2020-10-21 09:05:00    22               2020-10-21 09:10:00    0               2020-10-21 09:15:00    0               2020-10-21 09:20:00    0Unknown        2020-10-21 09:05:00    0               2020-10-21 09:10:00    0               2020-10-21 09:15:00    36               2020-10-21 09:20:00    0有什么方法可以实现呢?
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

df2 = df.pivot(columns='flow').resample('5T').sum().stack()

df2.index = df2.index.swaplevel(0, 1)

>>> df2.sort_index()

                              cars

flow    time                      

In      2020-10-20 09:05:00  737.0

        2020-10-20 09:10:00    0.0

        2020-10-20 09:15:00   42.0

Out     2020-10-20 09:05:00   22.0

        2020-10-20 09:10:00    0.0

        2020-10-20 09:15:00    0.0

Unknown 2020-10-20 09:05:00    0.0

        2020-10-20 09:10:00    0.0

        2020-10-20 09:15:00   36.0

我个人会将数据保留为表格形式:


>>> df.pivot(columns='flow').resample('5T').sum()

                      cars              

flow                    In   Out Unknown

time                                    

2020-10-20 09:05:00  737.0  22.0     0.0

2020-10-20 09:10:00    0.0   0.0     0.0

2020-10-20 09:15:00   42.0   0.0    36.0


查看完整回答
反对 回复 2023-12-12
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信