首页 > 解决方案 > 熊猫:将每个值与列名匹配并创建另一列

问题描述

您好,我正在尝试在数据框中创建新列,现有列之一的列值与列名匹配。并想检查具有任何值或零的其他列值我在下面尝试的解决方案没有得到我的输出

Python:熊猫:将行值与列名/键的值匹配

我的数据框看起来像

loc     Var A   T   C   G
3985    T   0   0   1   0
4491    G   10  0   0   25
4492    G   0   1   0   0
5265    A   35  10  0   1
7328    G   0   0   20  1
6927    A   1   0   0   0

输出我想要的

loc     Var A   T   C   G  REF ALT
3985    T   0   0   1   0    0   1
4491    G   10  0   0   25   25  10
4492    G   0   1   0   0    0   1
5265    A   35  10  0   0    35  10
7328    G   0   0   20  1    1   20
6927    A   1   0   0   0    1   0

列“REF”列匹配“Var”的值和将搜索除 Var 值以外的 ALT 列,其余列任何一个都有值,我只想在四列之间匹配(A,T,G,C ) 获取数据框中的另外两列

有什么建议么?帮助

标签: python-3.xpandas

解决方案


您可以使用DataFrame.lookupfirst 来获取您的REF列。然后我们通过从同一行中的所有其他值中ALT获取值来创建列:max

l1 = df.lookup(df.index, df['Var'])
l2 = df.iloc[:, 2:].apply(list, axis=1)

df['REF'] = l1
df['ALT'] = [max(set([x]) ^ set(y)) for x, y in zip(l1, l2)]

    loc Var   A   T   C   G  REF  ALT
0  3985   T   0   0   1   0    0    1
1  4491   G  10   0   0  25   25   10
2  4492   G   0   1   0   0    0    1
3  5265   A  35  10   0   1   35   10
4  7328   G   0   0  20   1    1   20
5  6927   A   1   0   0   0    1    0

推荐阅读