我有兩個資料框架,每個都有資料時間列。 df1 有重復的資料時間,df2 沒有。
我試圖將 df2 中的值分配給 df1 中的一個新列,在每個日期時間匹配的地方,包括 df1 中的所有重復值。
現在,我可以通過嵌套 for 回圈和迭代索引值來實作這一目標,但是這顯然很慢,而且顯然被認為是資料框架的壞形式,因為它沒有利用其最出色的方法。
示例(非功能性)代碼:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'datetime'/span>: ['3/10/2000 17:03:00'/span>, '3/10/2000 17:03:00'/span>, '3/10/2000 17:04:00'/span>]。
'value1': [2, 3, 4] 。
'value2': ['x', 'y', 'z']})
df1['datetime'] = pd.to_datetime(df1['datetime'] )
print('df1', df1)
df2 = pd.DataFrame({'datetime'/span>: ['3/10/2000 17:03:00'/span>, '3/10/2000 17:04:00'/span>, '3/10/2000 17:05:00'/span>]。
'value1': [2, 3, 4] 。
'value2'/span>: ['x'/span>, 'y'/span>, 'z'/span>]。
'value3'/span>: ['p'/span>, 'd'/span>, 'q'/span>]})
df2['datetime'] = pd.to_datetime(df2['datetime'] )
print('df2', df2)
df1.loc[:, 'value3'] = df2.loc[df1.loc[:, 'datetime'] == df2.loc[:, 'dateetime'], 'value3']
print('modified df1',df1)
輸出:
df1 datetime value1 value2
0 2000-03-10 17:03:00 2 x
1 2000-03-10 17:03:00 3 y
2 2000-03-10 17:04:00 4 z
df2 資料時間 value1 value2 value3
0 2000-03-10 17: 03:00 2 x p
1 2000-03-10 17: 04:00 3 y d
2 2000-03-10 17:05:00 4 z q
修改后的df1 datetime value1 value2 value3
0 2000-03-10 17: 03:00 2 x p
1 2000-03-10 17:03:00 3y NaN
2 2000-03-10 17:04:00 4 z NaN
注意輸出(列印為 "modified df1")在df1['value3']中有'p, NaN, NaN',而我需要它有'p, p, d'。
如何使其發揮作用?是否有某種我可以設定的遞回標志,或者這完全是使用.loc的錯誤方法?同樣,我試圖避免用嵌套的for回圈來做這種事情的糟糕形式(以及Pandas的警告!)。謝謝大家的幫助。
uj5u.com熱心網友回復:
Stef在評論中提出了正確的想法。
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'datetime'/span>: ['3/10/2000 17:03:00'/span>, '3/10/2000 17:03:00'/span>, '3/10/2000 17:04:00'/span>]。
'value1': [2, 3, 4] 。
'value2': ['x', 'y', 'z']})
df1['datetime'] = pd.to_datetime(df1['datetime'] )
print('df1', df1)
df2 = pd.DataFrame({'datetime'/span>: ['3/10/2000 17:03:00'/span>, '3/10/2000 17:04:00'/span>, '3/10/2000 17:05:00'/span>]。
'value1': [2, 3, 4] 。
'value2'/span>: ['x'/span>, 'y'/span>, 'z'/span>]。
'value3'/span>: ['p'/span>, 'd'/span>, 'q'/span>]})
df2['datetime'] = pd.to_datetime(df2['datetime'] )
print('df2'/span>,df2)
df1 = df1. merge(df2[["datetime"/span>, "value3"/span>]]。on = "datetime", suffixes=("", ""))
print('modified df1', df1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/319291.html
標籤:
