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

在熊猫数据框中按时间段计算一列

在熊猫数据框中按时间段计算一列

小唯快跑啊 2022-01-18 21:02:56
我想在熊猫数据框中按时间段计算列数。我的桌子: id1       date_time               adress       a_size        reom      2005-8-20 22:51:10      75157.5413   ceifwekd reom      2005-8-20 22:55:25      3571.37946   ceifwekd reom      2005-8-20 11:21:01      3571.37946   tnohcve reom      2005-8-20 11:29:09      97439.219    tnohcve penr      2005-8-20 17:07:16     97439.219    ceifwekd penr      2005-8-20 19:10:37      7391.6258    ceifwekd ....我需要:id1      time_period                     num_of_addressreom     2005-8-20 22:50:00 - 23:00:00      2reom     2005-8-20 11:20:00 - 11:30:00      2penr     2005-8-20 17:00:00 - 17:10:00      1我的代码:我创建了一个新列来获取 date_time 的小时数。 df['num_per_10_minutes'] = df['id1'].map(df.groupby('id1', 'hours').apply(lambda x: x['date_time'].count()))但这不是我想要的。我需要每 10 分钟计算“地址”的数量。
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

首先制作间隔列,然后使用pandas.DataFrame.groupby:


import pandas as pd


df['date_time'] = pd.to_datetime(df['date_time'])

df = df.set_index('date_time', drop= True).sort_index()


df['intervals'] = ["%s - %s" % (i, i+1) 

                   for i in pd.date_range('2005-08-20', '2005-08-21', freq='10 min')

                   for d in df.index if i<= d <= (i+1)]

df.groupby(['id1', 'intervals'])['adress'].count().reset_index()

输出:


    id1                                  intervals  adress

0  penr  2005-08-20 17:00:00 - 2005-08-20 17:10:00       1

1  penr  2005-08-20 19:10:00 - 2005-08-20 19:20:00       1

2  reom  2005-08-20 11:20:00 - 2005-08-20 11:30:00       2

3  reom  2005-08-20 22:50:00 - 2005-08-20 23:00:00       2


查看完整回答
反对 回复 2022-01-18
?
RISEBY

TA贡献1856条经验 获得超5个赞

第一个聚合计数GroupBy.sizewith Series.dt.floor:


df['date_time'] = pd.to_datetime(df['date_time'])


df = df.groupby(['id1', df['date_time'].dt.floor('10Min')]).size().reset_index(name='adress')

print (df)

    id1           date_time  adress

0  penr 2005-08-20 17:00:00       1

1  penr 2005-08-20 19:10:00       1

2  reom 2005-08-20 11:20:00       2

3  reom 2005-08-20 22:50:00       2

Series.dt.strftime然后用 next改变日期时间的格式10 Min:


df['date_time'] = (df['date_time'].dt.strftime('%Y-%m-%d %H:%M:%S') + 

                   (df['date_time'] + pd.Timedelta(10, unit='min')).dt.strftime(' - %H:%M:%S'))

print (df)

    id1                       date_time  adress

0  penr  2005-08-20 17:00:00 - 17:10:00       1

1  penr  2005-08-20 19:10:00 - 19:20:00       1

2  reom  2005-08-20 11:20:00 - 11:30:00       2

3  reom  2005-08-20 22:50:00 - 23:00:00       2

df['date_time'] = (df['date_time'].dt.strftime('%Y-%m-%d %H:%M:%S') + 

                   (df['date_time'] + pd.Timedelta(10, unit='min')).

                     dt.strftime(' - %Y-%m-%d %H:%M:%S'))

print (df)

    id1                                  date_time  adress

0  penr  2005-08-20 17:00:00 - 2005-08-20 17:10:00       1

1  penr  2005-08-20 19:10:00 - 2005-08-20 19:20:00       1

2  reom  2005-08-20 11:20:00 - 2005-08-20 11:30:00       2

3  reom  2005-08-20 22:50:00 - 2005-08-20 23:00:00       2


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

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