簡體   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