【问题标题】:merging in Pandas with shared data将 Pandas 与共享数据合并
【发布时间】:2015-03-11 23:06:57
【问题描述】:

我有以下形式的两个数据框:

PID    Block    Trial    Response
101    A        1        1
101    A        2        2
102    A        1        1
102    A        2        1

PID    Trial    Fix    Dur
101    1        x      10
101    2        y      12
102    1        z      9
102    2        y      13

我需要将它们组合成一个如下所示的数据框:

PID    Block    Trial    Response    Fix    Dur 
101    A        1        1           x      10
101    A        2        2           y      12
102    A        1        1           z      9
102    A        2        1           y      13

我尝试过使用 pd.merge(df1, df2, on=['PID', 'Trial'], how='outer', sort=False)。但这只是给出了这样的结果:

PID    Block    Trial    Response    Fix    Dur 
101    A        1        1           NaN    NaN
101    A        2        2           NaN    NaN
102    A        1        1           NaN    NaN
102    A        2        1           NaN    NaN
101    NaN      1        NaN         x      10
101    NaN      2        NaN         y      12
102    NaN      1        NaN         z      9
102    Nan      2        NaN         y      13

我对 pd.join 也没有任何运气。我还尝试使用 (PID, Trial) 元组创建一个新列,但在其上使用合并会产生与上述类似的结果。请帮忙!

【问题讨论】:

    标签: python pandas merge


    【解决方案1】:

    你想要一个内部连接:

    >>> import pandas as pd
    >>> df1 = pd.read_clipboard()
    >>> df2 = pd.read_clipboard()
    >>> df1
       PID Block  Trial  Response
    0  101     A      1         1
    1  101     A      2         2
    2  102     A      1         1
    3  102     A      2         1
    >>> df2
       PID  Trial Fix  Dur
    0  101      1   x   10
    1  101      2   y   12
    2  102      1   z    9
    3  102      2   y   13
    >>> pd.merge(df1, df2, on=['PID', 'Trial'], how='inner', sort=False)
       PID Block  Trial  Response Fix  Dur
    0  101     A      1         1   x   10
    1  101     A      2         2   y   12
    2  102     A      1         1   z    9
    3  102     A      2         1   y   13
    >>>
    

    【讨论】:

    • 感谢您的快速回复!我试过了,它给了我一个空的数据框。知道是什么原因造成的吗?
    • 您确定df1df2 与您在问题中所写的一样吗?我通过使用read_clipboard 复制和粘贴每个数据框来复制数据框。
    • 实际的数据框非常大,列更多,但它们仍然只有 PID 和 Trial 相同。我能想到的唯一与所讨论的不同的是它们有不同的行数(一些主题在一个数据框中有数据,但在另一个数据框中没有)。但我认为额外的行将被排除在合并的 df 之外。
    • 想通了。试验列在每个数据框中都有不同的类型
    猜你喜欢
    • 2019-11-12
    • 2023-03-13
    • 2021-12-14
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2015-09-18
    相关资源
    最近更新 更多