gpt4 book ai didi

pandas - 将 Pandas 数据框日期范围扩展到单独的行

转载 作者:行者123 更新时间:2023-12-05 08:14:29 27 4
gpt4 key购买 nike

我必须根据开始日期和结束日期将 pandas 数据框扩展到单独的行中。

原始数据框如下

ORIGINAL DATAFRAME

我的最终数据框应在各行的开始日期和结束日期之间的每一天重复。需要为每个日期扩展结果,同时保留“开始日期”和“结束日期”以外的其他列。

例如,开始日期 = 01-Jan-20 和结束日期 15-Jan-20 的第一行应扩展为 15 个单独的行,代表系列中的一个日期,如示例结果数据帧所示:

EXPECTED RESULTANT DATAFRAME

我尝试使用 itertuples 的解决方案来迭代数据框并将范围划分为单个日期,但是当数据框的大小很大时,该解决方案很慢。

非常感谢对此的任何最佳解决方案。

最佳答案

使用pandas.date_range在列表理解中,然后使用 DataFrame.explode (您至少需要为 explode 方法使用 pandas v 0.25.0):

# Minimal example setup
df = pd.DataFrame({
'TRIPNAME': ['HIGHSEASON', 'LOWSEASON', 'MEDSEASON'],
'TRIPCAT': ['H', 'L', 'M'],
'STARTDATE' : ['01JAN20', '16SEP20', '29JAN20'],
'ENDDATE': ['15JAN20', '30NOV20', '19JUL20'],
'FARE': [345, 280, 250]
})


df['DATE'] = [pd.date_range(s, e, freq='d') for s, e in
zip(pd.to_datetime(df['STARTDATE']),
pd.to_datetime(df['ENDDATE']))]

df = df.explode('DATE').drop(['STARTDATE', 'ENDDATE'], axis=1)

print(df)

[输出]

      TRIPNAME TRIPCAT  FARE       DATE
0 HIGHSEASON H 345 2020-01-01
0 HIGHSEASON H 345 2020-01-02
0 HIGHSEASON H 345 2020-01-03
0 HIGHSEASON H 345 2020-01-04
0 HIGHSEASON H 345 2020-01-05
.. ... ... ... ...
2 MEDSEASON M 250 2020-07-15
2 MEDSEASON M 250 2020-07-16
2 MEDSEASON M 250 2020-07-17
2 MEDSEASON M 250 2020-07-18
2 MEDSEASON M 250 2020-07-19

[264 rows x 4 columns]

关于pandas - 将 Pandas 数据框日期范围扩展到单独的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60039948/

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