[英]Merge two pandas dataframes using float index
我有兩個DataFrame
有不同的列,但我想通過在行上對齊它們來合並它們。 也就是說,我說有兩個dataFrames
df1 = pd.DataFrame(np.arange(12).reshape(6, 2), index=np.arange(6)*0.1, columns=['a', 'b'])
df1
a b
0.0 0 1
0.1 2 3
0.2 4 5
0.3 6 7
0.4 8 9
0.5 10 11
df2 = pd.DataFrame(np.arange(8).reshape(4, 2), index=[0.07, 0.21, 0.43, 0.54], columns=['c', 'd'])
df2
c d
0.07 0 1
0.21 2 3
0.43 4 5
0.54 6 7
我想合並df2
與df1
這樣的行df2
與來自`DF1最近鄰指數一致。 最終結果將是:
a b c d
0.0 0 1 NaN NaN
0.1 2 3 0 1
0.2 4 5 2 3
0.3 6 7 NaN NaN
0.4 8 9 4 5
0.5 10 11 6 7
我很欣賞有關如何有效解決這個問題的任何想法。
我會暫時將df2的索引重新定義為它的實際索引的舍入版本:
merged = (
df2.assign(idx=np.round(df2.index, 1)) # compute the rounded index
.reset_index(drop=True) # drop the existing index
.set_index('idx') # new, rounded index
.join(df1, how='right') # right join
.sort_index(axis='columns') # sort the columns
)
我得到:
a b c d
0.0 0 1 NaN NaN
0.1 2 3 0.0 1.0
0.2 4 5 2.0 3.0
0.3 6 7 NaN NaN
0.4 8 9 4.0 5.0
0.5 10 11 6.0 7.0
既然你提到關閉
df2.index=[min(df1.index, key=lambda x:abs(x-y)) for y in df2.index]
pd.concat([df1,df2],1)
Out[535]:
a b c d
0.0 0 1 NaN NaN
0.1 2 3 0.0 1.0
0.2 4 5 2.0 3.0
0.3 6 7 NaN NaN
0.4 8 9 4.0 5.0
0.5 10 11 6.0 7.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.