簡體   English   中英

使用float索引合並兩個pandas數據幀

[英]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

我想合並df2df1這樣的行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM