我有两个数据框:df_p
和df_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
最后删除列date
使用DataFrame.drop
:
df = df.drop('date', axis=1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句