gpt4 book ai didi

如果日期介于两个日期之间,则 Python Pandas 对列中的值求和

转载 作者:太空狗 更新时间:2023-10-30 01:11:45 25 4
gpt4 key购买 nike

我有一个数据框 df 可以用这个创建:

data={'id':[1,1,1,1,2,2,2,2],
'date1':[datetime.date(2016,1,1),datetime.date(2016,1,2),datetime.date(2016,1,3),datetime.date(2016,1,4),
datetime.date(2016,1,2),datetime.date(2016,1,4),datetime.date(2016,1,3),datetime.date(2016,1,1)],
'date2':[datetime.date(2016,1,5),datetime.date(2016,1,3),datetime.date(2016,1,5),datetime.date(2016,1,5),
datetime.date(2016,1,4),datetime.date(2016,1,5),datetime.date(2016,1,4),datetime.date(2016,1,1)],
'score1':[5,7,3,2,9,3,8,3],
'score2':[1,3,0,5,2,20,7,7]}
df=pd.DataFrame.from_dict(data)

And looks like this:
id date1 date2 score1 score2
0 1 2016-01-01 2016-01-05 5 1
1 1 2016-01-02 2016-01-03 7 3
2 1 2016-01-03 2016-01-05 3 0
3 1 2016-01-04 2016-01-05 2 5
4 2 2016-01-02 2016-01-04 9 2
5 2 2016-01-04 2016-01-05 3 20
6 2 2016-01-03 2016-01-04 8 7
7 2 2016-01-01 2016-01-01 3 7

我需要做的是为每个 score1score2 创建一个列,这将创建两个列,对 score1 的值求和和 score2,根据 usedate 是否在 date1date2 之间。 usedate 是通过获取介于(包括)date1 最小值和 date2 最大值之间的所有日期来创建的。我用它来创建日期范围:

drange=pd.date_range(df.date1.min(),df.date2.max())    

生成的数据框 newdf 应该如下所示:

     usedate  score1sum  score2sum
0 2016-01-01 8 8
1 2016-01-02 21 6
2 2016-01-03 32 13
3 2016-01-04 30 35
4 2016-01-05 13 26

为了澄清,在 usedate 2016-01-01,score1sum 为 8,这是通过查看 df 中的行计算得出的,其中2016-01-01 介于 date1date2 之间,包括 row0(5) 和 row8(3)。在 usedate 2016-01-04 上,score2sum 为 35,这是通过查看 df 中的行计算得出的,其中 2016-01-04 是在 date1date2 之间并包括在内,它对 row0(1)、row3(0)、row4(5)、row5(2)、row6(20)、row7( 7).

也许是某种groupby,或者melt 然后是groupby

最佳答案

您可以将 apply 与 lambda 函数一起使用:

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

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

df1 = pd.DataFrame(index=pd.date_range(df.date1.min(), df.date2.max()), columns = ['score1sum', 'score2sum'])

df1[['score1sum','score2sum']] = df1.apply(lambda x: df.loc[(df.date1 <= x.name) &
(x.name <= df.date2),
['score1','score2']].sum(), axis=1)

df1.rename_axis('usedate').reset_index()

输出:

     usedate  score1sum  score2sum
0 2016-01-01 8 8
1 2016-01-02 21 6
2 2016-01-03 32 13
3 2016-01-04 30 35
4 2016-01-05 13 26

关于如果日期介于两个日期之间,则 Python Pandas 对列中的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48103845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com