【问题标题】:Pandas: Matching column each value with column name and creating another columns熊猫:将每个值与列名匹配并创建另一列
【发布时间】:2020-09-26 18:01:39
【问题描述】:

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

Python: pandas: match row value to column name/ key's value

我的数据框看起来像

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”的值匹配,而 ALT 列将使用 Var 值以外的值进行搜索,其余列任何一个都有值,我只想在四列之间进行匹配(A,T, G, C) 获取数据框中的另外两列

有什么建议吗?帮助

【问题讨论】:

  • 为什么在输出中将 A 列更改为 loc 5265?
  • @Erfan 对不起,我会编辑它

标签: python-3.x pandas


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-12
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2021-05-19
    • 2021-06-25
    • 1970-01-01
    相关资源
    最近更新 更多