gpt4 book ai didi

python - Pandas:组合具有不同时间频率的列

转载 作者:行者123 更新时间:2023-11-28 21:31:08 25 4
gpt4 key购买 nike

我有两个数据帧:df_pdf_d

df_p 包含 8760 个条目,代表 1 年的记录,分辨率为 1 小时。date 是日期时间列,hy 是小时数(一年中的),profile 是一个值

                       hy   profile
date
1900-01-01 00:00:00 0 0.030908
1900-01-01 01:00:00 1 0.030053
1900-01-01 02:00:00 2 0.043185
1900-01-01 03:00:00 3 0.048040
1900-01-01 04:00:00 4 0.070803
1900-01-01 05:00:00 5 0.070948
... ... ...
1900-12-31 19:00:00 8755 0.058093
1900-12-31 20:00:00 8756 0.030908
1900-12-31 21:00:00 8757 0.030053
1900-12-31 22:00:00 8758 0.043185
1900-12-31 23:00:00 8759 0.048040

df_d 包含 365 个条目,代表 1 年的记录,分辨率为 1 天。date 是日期时间列,HDD 是全天有效的值。

date           HDD
1900-01-01 9.823750
1900-01-02 7.747917
1900-01-03 5.198750
1900-01-04 7.547500
1900-01-05 9.755000
...
1900-12-25 8.549129
1900-12-26 8.245625
1900-12-27 7.641417
1900-12-28 6.176417
1900-12-29 6.368917
1900-12-30 6.443333
1900-12-31 7.224583

我想要做的是在 df_p 数据框中创建一个新列,该列在一天中的每个小时都有相应的 HDD 值。

以下是所需输出的示例:

                       hy   profile  HDD
date
1900-01-01 00:00:00 0 0.030908 9.823750
1900-01-01 01:00:00 1 0.030053 9.823750
1900-01-01 02:00:00 2 0.043185 9.823750
1900-01-01 03:00:00 3 0.048040 9.823750
1900-01-01 04:00:00 4 0.070803 9.823750
1900-01-01 05:00:00 5 0.070948 9.823750
... ... ...
1900-12-31 19:00:00 8755 0.058093 7.224583
1900-12-31 20:00:00 8756 0.030908 7.224583
1900-12-31 21:00:00 8757 0.030053 7.224583
1900-12-31 22:00:00 8758 0.043185 7.224583
1900-12-31 23:00:00 8759 0.048040 7.224583

感谢您的帮助。

最佳答案

使用merge_asof :

#if necessary convert to datetimes
df_d['date'] = pd.to_datetime(df_d['date'])
df_p.index = pd.to_datetime(df_p.index)

df = pd.merge_asof(df_p, df_d, left_index=True, right_on='date')
print (df)
hy profile date HDH
0 0 0.030908 1900-01-01 9.823750
0 1 0.030053 1900-01-01 9.823750
0 2 0.043185 1900-01-01 9.823750
0 3 0.048040 1900-01-01 9.823750
0 4 0.070803 1900-01-01 9.823750
0 5 0.070948 1900-01-01 9.823750
11 8755 0.058093 1900-12-31 7.224583
11 8756 0.030908 1900-12-31 7.224583
11 8757 0.030053 1900-12-31 7.224583
11 8758 0.043185 1900-12-31 7.224583
11 8759 0.048040 1900-12-31 7.224583

最后删除列日期使用DataFrame.drop :

df = df.drop('date', axis=1)

关于python - Pandas:组合具有不同时间频率的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58820338/

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