python特定数之和_python-在特定时间范围内来自pandas数据帧的值的总和

我有一个相当复杂的问题.我需要在一组特定的开始日期和结束日期内从数据框中选择行,然后将这些值求和并将它们放入新的数据框中.

因此,我从数据帧df开始:

import random

dates = pd.date_range('20150101 020000',periods=1000)

df = pd.DataFrame({'_id': random.choice(range(0, 1000)),

'time_stamp': dates,

'value': random.choice(range(2,60))

})

并定义一些开始日期和结束日期:

import pandas as pd

start_date = ["2-13-16", "2-23-16", "3-17-16", "3-24-16", "3-26-16", "5-17-16", "5-25-16", "10-10-16", "10-18-16", "10-23-16", "10-31-16", "11-7-16", "11-14-16", "11-22-16", "1-23-17", "1-29-17", "2-06-17", "3-11-17", "3-23-17", "6-21-17", "6-28-17"]

end_date = pd.DatetimeIndex(start_date) + pd.DateOffset(7)

然后需要发生的是,我需要使用weekly_sum创建一个新的数据框,该框将在start_date和end_date之间出现的df的值列求和.

因此,例如,新数据帧的第一行将返回2-13-16和2-20-16之间的值之和.我想我会使用groupby.sum()或类似的东西.

它可能看起来像这样:

id start_date end_date weekly_sum

65 2016-02-13 2016-02-20 100

任何方向都将不胜感激!

附:我知道我对random.choice的使用有些不可思议,因此,如果您有更好的生成随机数的方法,我很乐意看到它!

解决方法:

您可以使用

def get_dates(x):

# Select the df values between start and ending datetime.

n = df[(df['time_stamp']>x['start'])&(df['time_stamp']

# Return first id and sum of values

return n['id'].values[0],n['value'].sum()

dates = pd.date_range('20150101 020000',periods=1000)

df = pd.DataFrame({'id': np.random.randint(0,1000,size=(1000,)),

'time_stamp': dates,

'value': np.random.randint(2,60,size=(1000,))

})

ndf = pd.DataFrame({'start':pd.to_datetime(start_date),'end':end_date})

#Unpack and assign values to id and value column

ndf[['id','value']] = ndf.apply(lambda x : get_dates(x),1).apply(pd.Series)

print(df.head(5))

id time_stamp value

0 770 2015-01-01 02:00:00 59

1 781 2015-01-02 02:00:00 32

2 761 2015-01-03 02:00:00 40

3 317 2015-01-04 02:00:00 16

4 538 2015-01-05 02:00:00 20

print(ndf.head(5))

end start id value

0 2016-02-20 2016-02-13 569 221

1 2016-03-01 2016-02-23 28 216

2 2016-03-24 2016-03-17 152 258

3 2016-03-31 2016-03-24 892 265

4 2016-04-02 2016-03-26 606 244

标签:python,pandas,dataframe,datetime,group-by

来源: https://codeday.me/bug/20191013/1906876.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值