gpt4 book ai didi

python - 根据指定的 START_DATE 和 END_DATE 从单独的 df 对 Pandas df 进行分组

转载 作者:行者123 更新时间:2023-12-01 23:16:54 24 4
gpt4 key购买 nike

我正在使用两个 pandas 数据框,我试图按相同的日期范围对其进行分组。我想使用这个我们可以称之为“小时”的示例 df 作为设置 START_DATE 和 END_DATE 的基础,我可以通过按索引按每 5 条记录进行分组来做到这一点。这是“小时”数据框的样子:

     HOURS   MIN_DATE   MAX_DATE
0 93.00 2021-01-05 2021-01-12
1 203.25 2021-01-13 2021-01-19
2 210.00 2021-01-20 2021-01-26
3 185.75 2021-01-27 2021-02-02
4 180.25 2021-02-03 2021-02-09
5 172.25 2021-02-10 2021-02-16

然后我有一个单独的 df,我想用相同的日期范围进行总结,我称之为“模型”,如下所示:

MODEL       DATE  MODEL_1  MODEL_2  MODEL_3  MODEL_4  MODEL_5  MODEL_6  
0 2021-01-05 0 2 0 0 0 0
1 2021-01-06 0 0 0 0 3 0
2 2021-01-07 0 0 0 0 0 0
3 2021-01-13 3 0 0 0 0 0
4 2021-01-14 0 0 1 1 1 0
5 2021-01-15 0 0 0 0 0 0
6 2021-01-20 0 0 0 0 0 1
7 2021-01-21 0 3 0 0 0 1

我最终要寻找的是这个结果:

      MIN_DATE   MAX_DATE   MODEL_1  MODEL_2  MODEL_3  MODEL_4  MODEL_5  MODEL_6 
0 2021-01-05 2021-01-12 0 2 0 0 3 0
1 2021-01-13 2021-01-19 3 0 1 1 1 0
2 2021-01-20 2021-01-26 0 3 0 0 0 2

我一直无法找到一种方法来使用“小时”数据中的 MIN_DATE 和 MAX_DATE 对“模型”数据使用 .groupby()。我应该使用其他操作还是有办法使用这些日期来汇总模型数据?

谢谢

最佳答案

尝试使用 pd.IntervalIndexgroupby:

# First let's ensure that all DATE columns are datetime dtype:
hours_df[['MIN_DATE', 'MAX_DATE']] = hours_df[['MIN_DATE', 'MAX_DATE']].apply(pd.to_datetime)

model_df['DATE'] = pd.to_datetime(model_df['DATE'])

# Create IntervalIndex using from_arrays
hours_df['interval'] = pd.IntervalIndex.from_arrays(hours_df['MIN_DATE'], hours_df['MAX_DATE'], closed='both')

#set 'interval' as index of hours_df
hours_df = hours_df.set_index('interval')

# groupby and sum
model_df.groupby(hours_df.loc[model_df['DATE']].index).sum()

输出:

                          MODEL_1  MODEL_2  MODEL_3  MODEL_4  MODEL_5  MODEL_6
interval
[2021-01-05, 2021-01-12] 0 2 0 0 3 0
[2021-01-13, 2021-01-19] 3 0 1 1 1 0
[2021-01-20, 2021-01-26] 0 3 0 0 0 2

关于python - 根据指定的 START_DATE 和 END_DATE 从单独的 df 对 Pandas df 进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68682201/

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