当前位置: 首页 > 知识库问答 >
问题:

如何比较另一列数据帧中的一列值是否可用,并提取第二列数据帧的另一列(如果存在)

陈修诚
2023-03-14

我有两个数据帧,如下所示-

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

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

为此,我尝试了下面的代码片段,它也在工作,但对于我的长数据帧,它不工作。我面临以下错误和警告消息-

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

代码片段-

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

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

共有1个答案

逄学潞
2023-03-14

您描述的是一个典型的合并操作。在您的特定情况下,有两个不同的数据帧共享一个标识符列(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

有关更多信息,请参见熊猫合并文档。

 类似资料:
  • 我有点被困在提取一个变量的值和另一个变量的条件上。例如,以下数据帧: 当时,如何获取的值?每次提取的值时,都会得到一个对象,而不是字符串。

  • 情况: 两个数据帧(df1和df2)具有相同的三个索引,例如“A”、“B”、“C”。df1和df2的列数不同。df1和df2中的所有单元格都填充了float类型的数据。 DF1: DF2: 目标: 从df2中选择的列(例如“BBB”)与df1的每列相加后,结果应存储在新的数据帧(df_new)中。df_new的格式应为df1(列数和行数),并具有与df1相同的列名和索引。 new_df: 我的做法

  • 我有两个数据帧,一个包含数据,第二个包含代码及其解码值。我想将df1[代码]与df2[代码]匹配,并将df2[值]粘贴在df1中。需要注意的是,我的第二个数据帧包含代码和值一次,基本上是一张代码和值,但在第一个数据帧中,代码是重复的,因此将粘贴的值列应该代表每次代码出现在df1[代码]列中时的值。 我需要: 基本上是从第二个数据帧转换一个数据帧中的代码。

  • 用其他dataframe的列值替换dataframe的一列中的nan值时出现问题。下面是一个测试示例: 我想用其他dataframe中的特定值替换列名中的Nan值(如果其中有一些Nan值,则不是其他列),例如此dataframe中的Name2值: 我想得到的是: 这是此示例的测试代码: 然后我尝试了这三种方法,但都不起作用——我的数据帧始终保持Nan值。 你能告诉我哪里出错了吗?

  • 我有一个大数据框(prices),它包含一个长描述和一个与该描述相关联的价格。我生成了另一个数据框(单词),它保存了那些长描述中的所有唯一单词。我试图做的是从prices数据框中获取特定单词的平均价格,然后将其存储在单词dataframe中,与单词所在的行相同。 我设法获得了一个特定单词的平均值,但当我尝试在单词数据框中循环时,它花费了太多的时间。 这适用于单个值: 这是我尝试运行的循环: 示例数