繁体   English   中英

根据另一个 dataframe 替换 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 假设您的数据框将是dfdf2

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM