【问题标题】:Pandas: New column from conditions and from another data frame熊猫:来自条件和另一个数据框的新列
【发布时间】:2021-08-22 11:16:57
【问题描述】:

我有两个数据框,df1 和 df2。

df1                df2
A   B              C   D   E
ad  df             ad  se  1
ad  se             xc  je  2
xc  je             ad  df  3
...                ...

我需要使用 df2E 列中包含的值在 df1 中创建一个新列。为此,我需要在 AC 列之间以及从 BD 中找到匹配值df1df2

where A == C & B == D 
      XX = E

结果应该是这样的:

df1                
A   B   XX         
ad  df  3          
ad  se  1          
xc  je  2         
...                

这可能很简单,但我对 pandas 很陌生,还没有真正找到实现这一点的方法。

非常欢迎任何建议!

【问题讨论】:

  • 请在您的问题中添加您尝试过的代码(强烈建议这样做),谢谢。

标签: python pandas dataframe


【解决方案1】:

您可以根据您提到的列合并两个数据框。

>>> result = df1.merge(df2, left_on=['A', 'B'], right_on=['C', 'D'])
>>> result
    A   B   C   D   E
0   ad  df  ad  df  3
1   ad  se  ad  se  1
2   xc  je  xc  je  2

并删除 CD 列。

result.drop(columns=['C', 'D'], inplace=True)

Else,一个更优雅的解决方案。将CD的列重命名为AB,就可以直接执行merge了。

>>> result = df1.merge(df2.rename(columns={'C': 'A', 'D': 'B'}))
>>> result
    A   B   E
0   ad  df  3
1   ad  se  1
2   xc  je  2

```py

【讨论】:

    【解决方案2】:

    我认为只需调用pd.mergedf.merge 即可实现您想要的。

    小例子

    import pandas as pd
                                                                                           
    df1 = pd.DataFrame({'A': ['ad', 'ad', 'xc'], 'B': ['df', 'se', 'je']})
    df2 = pd.DataFrame({'C': ['ad', 'xc', 'ad'], 'D': ['se', 'je', 'df'], 'E': [1, 2, 3]})
                                                                                           
                                                                                           
                                                                                           
    df1.merge(df2, left_on=['A', 'B'], right_on=['C', 'D'])
    

    输出

        A   B   C   D  E
    0  ad  df  ad  df  3
    1  ad  se  ad  se  1
    2  xc  je  xc  je  2
    

    【讨论】:

      【解决方案3】:

      试试这个:

      pd.merge(df1, df2.rename(columns={'C':'A', 'D':'B'}), on=['A', 'B'], how='left')
      

      【讨论】:

      • 完美运行。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 2019-11-18
      相关资源
      最近更新 更多