Python 3.x 根据来自其他数据帧的信息添加列

Python 3.x 根据来自其他数据帧的信息添加列,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我正在寻找一个问题的答案,我本可以用for循环来解决这个问题。 我有两个数据帧: ind_1 ind_2 ind_3 prod_id A = a 1 0 0 a 0 1 0 b 0 1 0 c 0 0 1 a 0 0 1 a b

我正在寻找一个问题的答案,我本可以用for循环来解决这个问题。 我有两个数据帧:

           ind_1 ind_2 ind_3
   prod_id
A =   a        1    0      0
      a        0    1      0
      b        0    1      0
      c        0    0      1
      a        0    0      1

             a     b     c
B = ind_1   0.1   0.2   0.3
    ind_2   0.4   0.5   0.6
    ind_3   0.7   0.8   0.9
我正在寻找一种方法来解决熊猫的以下问题: 我想用索引和列名映射数据框B的条目,并在数据框a中创建一个新列,因此结果如下所示:

           ind_1 ind_2 ind_3   y 
   prod_id
A =   a        1    0      0  0.1
      a        0    1      0  0.4
      b        0    1      0  0.5
      c        0    0      1  0.9 
      a        0    0      1  0.7
有没有办法不使用for循环来解决这个问题

提前谢谢你

用于两个数据帧中的多索引系列,然后按callable只筛选1个值,按filter b Value,删除第一级多索引,最后添加新列-按A的索引值对齐:

或用于过滤,但处理有点复杂:

a = A.stack()
b = B.stack()

s = (a.to_frame('a')
      .rename_axis((None, None))
      .join(b.swaplevel(1,0)
      .rename('b'))
      .query("a == 1")
      .reset_index(level=1, drop=True))
A['y'] = s['b']
print (A)
         ind_1  ind_2  ind_3    y
prod_id                          
a            1      0      0  0.1
b            0      1      0  0.5
c            0      0      1  0.9

很抱歉响应太晚,但我在两个版本中都遇到了错误:第一个:ValueError:无法从重复的轴重新编制索引第二个:ValueError:无法在没有重叠索引名的情况下连接我正在尝试理解这两个实现,但找不到我的错误。我的两个数据帧的结构与我的文章中的一样。你能给我一点提示吗?@EveEdomenko-这意味着在你的数据中,一个或两个数据帧中的prod_id或id值或两者都是重复的。你能检查一下吗?如果您的问题中存在唯一值,则解决方案有效。是否可以删除重复项?谢谢您的回复。我有重复的产品ID。我必须保留它们,所以我应该改变我的问题。我不确定我是否必须保留它们。
a = A.stack()
b = B.stack()

s = (a.to_frame('a')
      .rename_axis((None, None))
      .join(b.swaplevel(1,0)
      .rename('b'))
      .query("a == 1")
      .reset_index(level=1, drop=True))
A['y'] = s['b']
print (A)
         ind_1  ind_2  ind_3    y
prod_id                          
a            1      0      0  0.1
b            0      1      0  0.5
c            0      0      1  0.9