【问题标题】:Merging two dataframes with different lengths合并两个不同长度的数据帧
【发布时间】:2019-02-27 12:27:15
【问题描述】:

如何合并两个不同长度的 pandas 数据框,例如:

df1 = Index  block_id   Ut_rec_0
       0       0           7
       1       1           10
       2       2           2
       3       3           0
       4       4           10
       5       5           3
       6       6           6
       7       7           9


df2 = Index  block_id   Ut_rec_1
       0       0           3
       2       2           5
       3       3           5
       5       5           9
       7       7           4

result = Index  block_id    Ut_rec_0    Ut_rec_1
           0       0           7           3
           1       1           10          NaN
           2       2           2           5
           3       3           0           5
           4       4           10          NaN
           5       5           3           9
           6       6           6           NaN
           7       7           9           4

我已经尝试过类似的方法,但没有成功:

df_result = pd.concat([df1, df2], join_axes=[df1['block_id']])

我已经尝试过: df_result = pd.concat([df1,df2,axis = 1) 但结果是:

Index   block_id    Ut_rec_0    Index   block_id    Ut_rec_1
  0            0          7         0.0   0.0         3.0
  1            1          10        1.0   2.0         5.0
  2            2          2         2.0   3.0         5.0
  3            3          0         3.0   5.0         9.0
  4            4          10        4.0   7.0         4.0
  5            5          3         NaN   NaN         NaN
  6            6          6         NaN   NaN         NaN
  7            7          9         NaN   NaN         NaN

【问题讨论】:

  • pd.concat([df1, df2],axis=1)
  • 没有给出预期的结果
  • 我使用 pd.concat([df1, df2],axis=1) 输出重新处理了这个问题

标签: python python-3.x pandas


【解决方案1】:

pandas.DataFrame.join 可以基于列数据(或索引)中的重叠“加入”数据帧。像这样的东西可能对你有用:

df1.join(df2.set_index('block_id'), on='block_id')

【讨论】:

  • 我找到了解决方案:result = df1.merge(df2, on='block_id', how='left')
  • 那你的问题已经回答了吗?
【解决方案2】:

正如@Wen 所说,最好将concataxis 一起用作1,如以下代码:

pd.concat([df1, df2],axis=1)

【讨论】:

  • 我使用 pd.concat([df1, df2],axis=1) 输出重新处理了这个问题
【解决方案3】:

你需要,pd.merge 外连接,

pd.merge(df1,df2,on=['Index','block_id'],how='outer')
#[out]
#Index  block_id    Ut_rec_0    Ut_rec_1
#0      0               7       3.0
#1      1               10      NaN
#2      2               2       5.0
#3      3               0       5.0
#4      4               10      NaN
#5      5               3       9.0
#6      6               6       NaN
#7      7               9       4.0

【讨论】:

    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多