![](/img/trans.png)
[英]How to replace pandas dataframe values based on lookup values in another dataframe?
[英]replace dataframe values based on another dataframe
我有一个 pandas dataframe 结构如下:
timestamp y
0 2020-01-01 00:00:00 336.0
1 2020-01-01 00:15:00 544.0
2 2020-01-01 00:30:00 736.0
3 2020-01-01 00:45:00 924.0
4 2020-01-01 01:00:00 1260.0
...
timestamp
列是日期时间数据类型
我还有另一个 dataframe 具有以下结构:
y
timestamp
00:00:00 625.076923
00:15:00 628.461538
00:30:00 557.692308
00:45:00 501.692308
01:00:00 494.615385
...
在这种情况下,时间是 pandas 日期时间索引。
现在我要做的是替换时间字段匹配的第一个 dataframe 中的值,即一天中的时间与第二个数据集匹配。
我更喜欢的新答案:实际使用.map()
仍然需要让 df2 有时间列来匹配。
df2 = df2.reset_index()
df2['timestamp'] = pd.to_datetime(df2['timestamp'].dt.time
df['y'] = df['timestamp'].dt.time.map(dict(zip(df2['timestamp',df2['y'])))
IIUC 你的第一个 dataframe df1 的时间戳是datetime
类型,你的第二个 dataframe (df2) 也有一个datetime
类型的索引,但只有时间而不是日期。
那么你可以这样做:
df1['y'] = df1['timestamp'].dt.time.map(df2['y'])
如果有更好的方法,我不会感到惊讶,但是您可以通过努力获取表格来实现这一点,以便它们可以按时merge
。 假设您的数据框将是df
和df2
。
df['time'] = df['timestamp'].dt.time
df2 = df2.reset_index()
df2['timestamp'] = pd.to_datetime(df2['timestamp'].dt.time
df_combined = pd.merge(df,df2,left_on='time',right_on='timestamp')
df_combined
timestamp_x y_x time timestamp_y y_y
0 2020-01-01 00:00:00 336.0 00:00:00 00:00:00 625.076923
1 2020-01-01 00:15:00 544.0 00:15:00 00:15:00 628.461538
2 2020-01-01 00:30:00 736.0 00:30:00 00:30:00 557.692308
3 2020-01-01 00:45:00 924.0 00:45:00 00:45:00 501.692308
4 2020-01-01 01:00:00 1260.0 01:00:00 01:00:00 494.615385
# This clearly has more than you need, so just keep what you want and rename things back.
df_combined = df_combined[['timestamp_x','y_y']]
df_combined = df_combined.rename(columns={'timestamp_x':'timestamp','y_y':'y'})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.