【问题标题】:Merging two dataframes based on index基于索引合并两个数据框
【发布时间】:2020-08-26 01:48:54
【问题描述】:

我整晚都在做这个,只是想不通,尽管我知道它应该很简单。所以,我对一个睡眠不足的家伙的以下咒语表示最诚挚的歉意:

所以,我有四个字段,Employee ID、Name、Station 和 Shift(ID 为非空整数,其余为字符串或空)。

我有大约 10 个数据帧,全部按 ID 索引。并且每个仅包含两列(名称和车站)或(名称和班次)

当然,现在我想将所有这些合并到一个数据帧中,其中每个 ID 都有一个唯一的行。

但此时我真的很沮丧(特别是因为我找不到直接检查我的最终数据帧以多少个唯一索引结束的方法)

在弄乱了一些非常丑陋的 .merge() 使用方式之后,我终于找到了 .concat()。但它不断为每个 ID 制作多行,当我签入 excel 时,索引就像 Table1/1234、Table2/1234 等。一行有班次,另一行有车站,这正是我想要避免的.

如何将我的所有数据编译到一个数据帧中,每个 ID 正好有一行?可能不使用 9 种不同的合并语句,因为我以后必须扩大规模。

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    如果我正确理解您的问题,这就是您想要的。

    例如,这 3 个数据帧..

    In [1]: df1
    Out[1]:
              0         1         2
    0  3.588843  3.566220  6.518865
    1  7.585399  4.269357  4.781765
    2  9.242681  7.228869  5.680521
    3  3.600121  3.931781  4.616634
    4  9.830029  9.177663  9.842953
    5  2.738782  3.767870  0.925619
    6  0.084544  6.677092  1.983105
    7  5.229042  4.729659  8.638492
    8  8.575547  6.453765  6.055660
    9  4.386650  5.547295  8.475186
    
    In [2]: df2
    Out[2]:
               0          1
    0  95.013170  90.382886
    2   1.317641  29.600709
    4  89.908139  21.391058
    6  31.233153   3.902560
    8  17.186079  94.768480
    
    In [3]: df
    Out[3]:
              0         1         2
    0  0.777689  0.357484  0.753773
    1  0.271929  0.571058  0.229887
    2  0.417618  0.310950  0.450400
    3  0.682350  0.364849  0.933218
    4  0.738438  0.086243  0.397642
    5  0.237481  0.051303  0.083431
    6  0.543061  0.644624  0.288698
    7  0.118142  0.536156  0.098139
    8  0.892830  0.080694  0.084702
    9  0.073194  0.462129  0.015707
    

    你可以的

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

    这会产生

    In [6]: pd.concat([df,df1,df2], axis=1)
    Out[6]:
              0         1         2         0         1         2          0          1
    0  0.777689  0.357484  0.753773  3.588843  3.566220  6.518865  95.013170  90.382886
    1  0.271929  0.571058  0.229887  7.585399  4.269357  4.781765        NaN        NaN
    2  0.417618  0.310950  0.450400  9.242681  7.228869  5.680521   1.317641  29.600709
    3  0.682350  0.364849  0.933218  3.600121  3.931781  4.616634        NaN        NaN
    4  0.738438  0.086243  0.397642  9.830029  9.177663  9.842953  89.908139  21.391058
    5  0.237481  0.051303  0.083431  2.738782  3.767870  0.925619        NaN        NaN
    6  0.543061  0.644624  0.288698  0.084544  6.677092  1.983105  31.233153   3.902560
    7  0.118142  0.536156  0.098139  5.229042  4.729659  8.638492        NaN        NaN
    8  0.892830  0.080694  0.084702  8.575547  6.453765  6.055660  17.186079  94.768480
    9  0.073194  0.462129  0.015707  4.386650  5.547295  8.475186        NaN        NaN
    

    更多详情您可能想查看pd.concat

    在您的问题中加入简单的说明性数据总是有助于获得答案。

    【讨论】:

    • 是的,我知道,这是标准格式,但对不起,我太累了,也试过这个语句,但现在我得到一个错误“传递值的形状是 ( 4315, 17), 指数暗示 (4213, 17)"。没关系,我现在睡得很好,谢谢好心的先生。编辑:我只需要使用axis = 0,因为我想合并索引,我已经完成了。太棒了,我告诉你睡眠和堆栈溢出的好处
    猜你喜欢
    • 2021-04-21
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多