我有 2 個具有不同列名并按日期時間索引的資料框:
df1
A B
time
2011-03-01 1 6
2011-03-02 4 8
2011-03-08 5 2
2011-03-09 6 3
df2
C D
time
2011-03-01 8 7
2011-03-02 9 6
2011-03-07 4 4
2011-03-08 1 2
我想合并它們以獲得這樣的東西:
A B C D
time
2011-03-01 1 6 8 7
2011-03-02 4 8 9 3
2011-03-07 NaN NaN 4 4
2011-03-08 5 2 1 2
2011-03-09 6 3 NaN NaN
而是使用concat命令:
df = pd.concat([df1, df2], axis=0).sort_index()
我得到以下合并的資料框:
A B C D
time
2011-03-01 1.0 6.0 NaN NaN
2011-03-01 NaN NaN 8.0 7.0
2011-03-02 4.0 8.0 NaN NaN
2011-03-02 NaN NaN 9.0 6.0
2011-03-07 NaN NaN 4.0 4.0
2011-03-08 5.0 2.0 NaN NaN
2011-03-08 NaN NaN 1.0 2.0
2011-03-09 6.0 3.0 NaN NaN
帶有不需要的重復索引!
如何正確合并 2 個 DF?
uj5u.com熱心網友回復:
你可以使用pd.merge
pd.merge(
df1, # Your first df
df2, # Second df
how="outer",
left_index=True, # merging on index (your datetime)
right_index=True, # mergin on index (your datetime)
)
uj5u.com熱心網友回復:
我不訪問您的資料框來檢查我的代碼,但這里是我想出的:
import numpy as np
df2.reset_index().merge(df1.reset_index(), on="time").fillna(np.NAN)
解釋
您需要呼叫reset_index()以將索引更改為列。如果您對此不感興趣,可以在函式中使用left_index和right_index引數。merge
uj5u.com熱心網友回復:
pandas.concat是要走的路。如果您有問題,那么這意味著您的索引不對齊,并且您將遇到與joinor相同的問題merge。可能是型別的不同:
df1 = pd.DataFrame({'A': [1,4,5,6], 'B': [6,8,2,3]},
index=['2011-03-01', '2011-03-02', '2011-03-08', '2011-03-09'])
df2 = pd.DataFrame({'C': [8,9,1,4], 'D': [7,6,2,4]},
index=['2011-03-01', '2011-03-02', '2011-03-07', '2011-03-08'])
pd.concat([df1, df2], axis=1)
輸出:
A B C D
2011-03-01 1.0 6.0 8.0 7.0
2011-03-02 4.0 8.0 9.0 6.0
2011-03-08 5.0 2.0 4.0 4.0
2011-03-09 6.0 3.0 NaN NaN
2011-03-07 NaN NaN 1.0 2.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/426988.html
上一篇:從自有物體導航的FK列名稱
