【问题标题】:Multi-index merge, join or concatenation in PandasPandas 中的多索引合并、连接或连接
【发布时间】:2019-12-13 03:30:03
【问题描述】:

我不理解official documentation 中的示例。是否有一些教科书或其他东西可以对这些概念有深入的了解?

对于我的直接用例,我有以下格式的数据,其中:

- purple is the multi-index

- integers are for illustration only

- green is due to df1

- yellow is due to df2

- red is Nan

- blue is the part of index that is common to both dataframes (there is never conflicting data)

df1:

df2:

我想要以下内容:

合并:

我试过了:

df1.merge(df2, how='outer')

但它摆脱了常见的多索引,并且似乎创建了重复的行,就像这样(发现很难跟踪数据,所以我可能会弄错,但它肯定错过了合并一些常见的索引)

不是我想要的:

【问题讨论】:

    标签: python pandas dataframe join merge


    【解决方案1】:

    重现问题:

    DF1

    import pandas as pd
    c1 = ['A', 'B', 'C', 'D', 'E', 'F']
    d1 = [
        ['A01', 'B01', 'C01', 'D01', 'E01', 'F01'],
        ['A02', 'B02', 'C02', 'D02', 'E02', 'F02'],
        ['A03', 'B03', 'C03', 'D03', 'E03', 'F03'],
        ['A04', 'B04', 'C04', 'D04', 'E04', 'F04'],
        ['A05', 'B05', 'C05', 'D05', 'E05', 'F05'],
        ['A14', 'B14', 'C14', 'D14', 'E14', 'F14'],
        ['A15', 'B15', 'C15', 'D15', 'E15', 'F15'],
        ['A16', 'B16', 'C16', 'D16', 'E16', 'F16'],
        ['A17', 'B17', 'C17', 'D17', 'E17', 'F17'],
        ['A26', 'B26', 'C26', 'D26', 'E26', 'F26'],
        ['A27', 'B27', 'C27', 'D27', 'E27', 'F27'],
        ['A28', 'B28', 'C28', 'D28', 'E28', 'F28'],
        ['A29', 'B29', 'C29', 'D29', 'E29', 'F29']
    ]
    df1 = pd.DataFrame(columns=c1, data=d1).set_index(['A','B'])
    df1
    

    DF2

    import pandas as pd
    c2 = ['A', 'B', 'Z']
    d2 = [
        ['A01', 'B01', 'Z01'],
        ['A02', 'B02', 'Z02'],
        ['A03', 'B03', 'Z03'],
        ['A04', 'B04', 'Z04'],
        ['A05', 'B05', 'Z05'],
        ['A06', 'B06', 'Z06'],
        ['A07', 'B07', 'Z07'],
        ['A08', 'B08', 'Z08'],
        ['A09', 'B09', 'Z09'],
        ['A10', 'B10', 'Z10'],
        ['A11', 'B11', 'Z11'],
        ['A12', 'B12', 'Z12'],
        ['A13', 'B13', 'Z13'],
        ['A14', 'B14', 'Z14'],
        ['A15', 'B15', 'Z15'],
        ['A16', 'B16', 'Z16'],
        ['A17', 'B17', 'Z17'],
        ['A18', 'B18', 'Z18'],
        ['A19', 'B19', 'Z19'],
        ['A20', 'B20', 'Z20'],
        ['A21', 'B21', 'Z21'],
        ['A22', 'B22', 'Z22'],
        ['A23', 'B23', 'Z23'],
        ['A24', 'B24', 'Z24'],
        ['A25', 'B25', 'Z25'],
        ['A26', 'B26', 'Z26'],
        ['A27', 'B27', 'Z37'],
        ['A28', 'B28', 'Z28'],
        ['A29', 'B29', 'Z29'],
        ['A30', 'B30', 'Z30']
    ]
    df2 = pd.DataFrame(columns=c2, data=d2).set_index(['A','B'])
    df2
    

    答案:DF1 和 DF2 合并

    import pandas as pd
    df1.reset_index().merge(df2.reset_index(), how='outer').set_index(['A','B']).sort_values('A')
    

    最初的问题可能是没有考虑多索引的列。

    答案正确:

            C   D   E   F   Z
    A   B                   
    A01 B01 C01 D01 E01 F01 Z01
    A02 B02 C02 D02 E02 F02 Z02
    A03 B03 C03 D03 E03 F03 Z03
    A04 B04 C04 D04 E04 F04 Z04
    A05 B05 C05 D05 E05 F05 Z05
    A06 B06 NaN NaN NaN NaN Z06
    A07 B07 NaN NaN NaN NaN Z07
    A08 B08 NaN NaN NaN NaN Z08
    A09 B09 NaN NaN NaN NaN Z09
    A10 B10 NaN NaN NaN NaN Z10
    A11 B11 NaN NaN NaN NaN Z11
    A12 B12 NaN NaN NaN NaN Z12
    A13 B13 NaN NaN NaN NaN Z13
    A14 B14 C14 D14 E14 F14 Z14
    A15 B15 C15 D15 E15 F15 Z15
    A16 B16 C16 D16 E16 F16 Z16
    A17 B17 C17 D17 E17 F17 Z17
    A18 B18 NaN NaN NaN NaN Z18
    A19 B19 NaN NaN NaN NaN Z19
    A20 B20 NaN NaN NaN NaN Z20
    A21 B21 NaN NaN NaN NaN Z21
    A22 B22 NaN NaN NaN NaN Z22
    A23 B23 NaN NaN NaN NaN Z23
    A24 B24 NaN NaN NaN NaN Z24
    A25 B25 NaN NaN NaN NaN Z25
    A26 B26 C26 D26 E26 F26 Z26
    A27 B27 C27 D27 E27 F27 Z37
    A28 B28 C28 D28 E28 F28 Z28
    A29 B29 C29 D29 E29 F29 Z29
    A30 B30 NaN NaN NaN NaN Z30
    

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 2022-07-28
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 2021-05-10
      • 2019-08-12
      相关资源
      最近更新 更多