【问题标题】:How to compare one column value available or not in another column dataframe and extract another column of second dataframe if present如何比较另一列数据框中可用或不可用的列值并提取第二个数据框的另一列(如果存在)
【发布时间】:2017-07-12 08:57:23
【问题描述】:

我有两个如下所示的数据框 -

df1_data = {'id' :{0:'101',1:'102',2:'103',3:'104',4:'105'},
        'sym1' :{0:'abc',1:'pqr',2:'xyz',3:'mno',4:'lmn'},
        'a name' :{0:'a',1:'b',2:'c',3:'d',4:'e'}}
df1 = pd.DataFrame(df1_data)
print df1

df2_data = {'sym2' :{0:'abc',1:'xxx',2:'xyz'},
            'a name' :{0:'k',1:'e',2:'t'}}
df2 = pd.DataFrame(df2_data)
print df2

我想检查 df2 的 sym2 列中是否存在 df1 中可用的 sym1,如果存在,我想提取该行的 a name 并将其作为新列添加到 df1 new_col 。

为此,我在 sn-p 下面尝试了它,它也可以工作,但对于我的长数据帧,它不起作用。我面临以下错误和警告消息 -

pandas.core.indexing.IndexingError: Unalignable boolean Series key provided
UserWarning: Boolean Series key will be reindexed to match DataFrame index.

代码 sn-p -

df1['root'] = df2[df1['sym1'].isin(df2.sym2)]['a name']
print df1

如何从 df2 中获取这些名称列并在 df1 中为特定行创建 new_col?

【问题讨论】:

  • 您是否需要更多信息来说明为什么会出现 IndexingError 或者下面的工作示例是否足够?

标签: python pandas


【解决方案1】:

您描述的是典型的合并操作。在您的特定情况下,您有两个不同的数据框共享一个标识符列(sym1 和 sym2),它们对齐属于一起的相应行(或标识)。您需要做的就是合并这些标识符列:

>>> to_merge = df2.rename(columns={"a name": "new_col"}) # rename to desired column name
>>> df_merged = pd.merge(df1, to_merge, how="left", left_on="sym1", right_on="sym2")

>>> print(df_merged)

    a name      id     sym1      new_col    sym2
0      a        101     abc        k        abc
1      b        102     pqr        NaN      NaN
2      c        103     xyz        t        xyz
3      d        104     mno        NaN      NaN
4      e        105     lmn        NaN      NaN

有关更多信息,请参阅 pandas 合并文档here。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 2020-08-13
    • 2020-03-20
    • 2020-08-25
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多