![](/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.