所以我試圖了解當時間戳的格式不同時,如何根據匹配的時間戳匹配兩列的值。我相信這與將兩列都放入同一個日期時間物件有關,但是其中一列在多列中有時間戳組件,所以我在這里有點困惑。我在 python 中作業。我將在這里進一步解釋。
我有這個帶時間戳的資料,我們將呼叫資料幀 A:
timestamp value_A
-------------------------
5/3/16 8:00 64
5/3/16 9:00 74
5/3/16 10:00 54
5/3/16 11:00 34
5/3/16 12:00 26
5/3/16 13:00 42
5/3/16 14:00 44
5/3/16 15:00 14
5/3/16 16:00 65
5/3/16 19:00 36
5/3/16 20:00 32
5/3/16 23:00 32
...
現在,這是帶時間戳的資料幀 B:
Month Day Hour value_B
------------------------------
5 3 8 35
5 3 9 44
5 3 10 22
5 3 11 25
5 3 12 75
5 3 13 64
5 3 14 43
5 3 15 44
5 3 16 26
5 3 17 22
5 3 18 35
5 3 19 36
5 3 20 32
5 3 21 26
5 3 22 44
5 3 23 22
...
建構式:
df1 = pd.DataFrame({'timestamp': ['5/3/16 8:00', '5/3/16 9:00', '5/3/16 10:00', '5/3/16 11:00',
'5/3/16 12:00', '5/3/16 13:00', '5/3/16 14:00', '5/3/16 15:00',
'5/3/16 16:00', '5/3/16 19:00', '5/3/16 20:00', '5/3/16 23:00'],
'value_A': [64, 74, 54, 34, 26, 42, 44, 14, 65, 36, 32, 32]})
df2 = pd.DataFrame({'Month': [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
'Day': [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
'Hour': [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
'value_B': [35, 44, 22, 25, 75, 64, 43, 44, 26, 22, 35, 36, 32, 26, 44, 22]})
現在,雖然這兩個資料框看起來很相似,但它們仍然有很大的不同,主要是因為資料框 A 在一列中具有時間戳,而資料框 B 具有跨三列的時間和日期。另外,請注意資料幀 A 中有跳過的時間戳條目,因此資料幀 B 有更多行。我想要做的是按時間戳匹配行,并創建一個新的資料幀,其中包含 value_A 和 value_B 的列,忘記 dataframe_B 中的 value_B 行,這些行與資料幀 A 沒有對應的時間戳。所以這是我想要的資料幀生成資料框 C:
timestamp value_A value_B
--------------------------------------
5/3/16 8:00 64 35
5/3/16 9:00 74 44
5/3/16 10:00 54 22
5/3/16 11:00 34 25
5/3/16 12:00 26 75
5/3/16 13:00 42 64
5/3/16 14:00 44 43
5/3/16 15:00 14 44
5/3/16 16:00 65 26
5/3/16 19:00 36 36
5/3/16 20:00 32 32
5/3/16 23:00 32 22
我對如何制定邏輯感到困惑,以便可以從我的月、日和小時列中拼湊出時間戳,以及如何指示我希望省略沒有匹配時間戳的行。如何將這兩個資料幀匹配到資料幀 C 中,以便匹配時間戳行?
uj5u.com熱心網友回復:
您可以將“月”、“日”、“小時”列的值轉換為串列串列,然后使用串列理解,將每個子串列格式化為正確的日期時間格式,并將最終的字串串列分配給新timestamp列。然后將兩timestamp列都轉換為日期時間(實際上本練習不需要此步驟,但我假設您稍后會需要它)。
最后從左邊合并df1到df2on timestamp:
df2['timestamp'] = ['{}/{}/16 {}:00'.format(*lst) for lst in df2.loc[:, 'Month':'Hour'].to_numpy().tolist()]
df2['timestamp'] = pd.to_datetime(df2['timestamp'])
df1['timestamp'] = pd.to_datetime(df1['timestamp'])
df3 = df1.merge(df2[['timestamp','value_B']], on='timestamp', how='left')
輸出:
timestamp value_A value_B
0 2016-05-03 08:00:00 64 35
1 2016-05-03 09:00:00 74 44
2 2016-05-03 10:00:00 54 22
3 2016-05-03 11:00:00 34 25
4 2016-05-03 12:00:00 26 75
5 2016-05-03 13:00:00 42 64
6 2016-05-03 14:00:00 44 43
7 2016-05-03 15:00:00 14 44
8 2016-05-03 16:00:00 65 26
9 2016-05-03 19:00:00 36 36
10 2016-05-03 20:00:00 32 32
11 2016-05-03 23:00:00 32 22
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408910.html
標籤:
下一篇:組合熊貓資料框中的重復行
