Python 3.x 根据来自其他数据帧的信息添加列
我正在寻找一个问题的答案,我本可以用for循环来解决这个问题。 我有两个数据帧: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
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