我有這個資料框A:
timestamp value_A value_A2
----------------------------------------
5/3/16 8:00 64 43
5/3/16 9:00 74 33
5/3/16 10:00 54 23
5/3/16 11:00 34 54
5/3/16 12:00 26 34
5/3/16 13:00 42 65
5/3/16 14:00 44 87
5/3/16 15:00 14 32
5/3/16 16:00 65 44
5/3/16 19:00 36 23
5/3/16 20:00 32 54
5/3/16 23:00 32 56
...
我想將此資料框與此資料框 B 合并:
Month value_B
-----------------------
05-03 08:00 35
05-03 09:00 44
05-03 10:00 22
05-03 11:00 25
05-03 12:00 75
05-03 13:00 64
05-03 14:00 43
05-03 15:00 44
05-03 16:00 26
05-03 17:00 22
05-03 18:00 35
05-03 19:00 36
05-03 20:00 32
05-03 21:00 26
05-03 22:00 44
05-03 23:00 22
...
我想根據匹配的日/月/小時/分鐘時間戳合并資料框,沒有年份。
請注意,資料幀 A 中有跳過的時間戳條目,因此資料幀 B 有更多行。我想要做的是按時間戳匹配行,并創建一個新的資料框,其中包含 value_A 和 value_B 的列,忘記 dataframe_B 中的 value_B 行,這些行與資料框 A 沒有對應的時間戳。所以這是我想要的資料框生成資料框 C:
timestamp value_A value_A2 value_B
-------------------------------------------------
5/3/16 8:00 64 43 35
5/3/16 9:00 74 33 44
5/3/16 10:00 54 23 22
5/3/16 11:00 34 54 25
5/3/16 12:00 26 34 75
5/3/16 13:00 42 65 64
5/3/16 14:00 44 87 43
5/3/16 15:00 14 32 44
5/3/16 16:00 65 44 26
5/3/16 19:00 36 23 36
5/3/16 20:00 32 54 32
5/3/16 23:00 32 56 22
我希望 value_B 值匹配相應月份和日期的所有時間戳,無論年份如何。我的意思是,假設 5/25 的資料幀 B 中的 55 的值應該與 16 年 5 月 25 日和 17 年 5 月 25 日的時間戳相匹配。
我在這方面遇到了很多麻煩,因為無論我嘗試什么,當我將最終合并的資料幀發送到 csv 然后在 Excel 中查看它時,我一直看到附加的年份,這意味著對于在上面的例子中,5/25/16 將匹配到 55,但 5/25/17 將沒有值。我如何才能以僅基于月/日/小時/分鐘時間戳將匹配 value_B 值到資料幀 A 時間戳的方式來完成此操作?
uj5u.com熱心網友回復:
首先,您必須以相同的格式獲取兩個資料幀。
對于 df1:
df1["timestamp"] = pd.to_datetime(df1["timestamp"])
df1["timestamp"] = df1["timestamp"].dt.strftime("%d-%m %H:%M")
對于 df2:
df2["Month"] = pd.to_datetime(df2["Month"], format="%d-%m %H:%M")
df2["Month"] = df2["Month"].dt.strftime("%m-%d %H:%M")
然后,我們將它合并到一個資料框中,并從時間戳或月份中洗掉一列。
df3 = pd.merge(df1, df2, left_on="timestamp", right_on="Month")
df3.drop(['Month'], axis=1, inplace=True)
這將產生您正在尋找的相同輸出!
uj5u.com熱心網友回復:
首先將列轉換timestamp為日期時間,然后創建Month具有相同格式的新列,例如:
df1['Month'] = pd.to_datetime(df1['timestamp']).dt.strftime('%m-%d %H:%M')
然后將左連接與第二個DataFrame與洗掉Month列一起使用:
df = df1.merge(df2, on='Month', how='left').drop('Month', axis=1)
print (df)
timestamp value_A value_B
0 5/3/16 8:00 64 35
1 5/3/16 9:00 74 44
2 5/3/16 10:00 54 22
3 5/3/16 11:00 34 25
4 5/3/16 12:00 26 75
5 5/3/16 13:00 42 64
6 5/3/16 14:00 44 43
7 5/3/16 15:00 14 44
8 5/3/16 16:00 65 26
9 5/3/16 19:00 36 36
10 5/3/16 20:00 32 32
11 5/3/16 23:00 32 22
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/409491.html
標籤:
上一篇:如何按日期對組內的輸出進行排序?
