【问题标题】:Change value of a given column if another column contains the name of the given column如果另一列包含给定列的名称,则更改给定列的值
【发布时间】:2022-01-22 15:56:31
【问题描述】:

我是一名中级学习者,我有一个如下所示的 pandas 数据框:

dfx=pd.DataFrame({'ID':['ID_1','ID_2','ID_3','ID_4'],'Extracts':[['QA,QB'], ['QB,QD'], ['QA,QD'], ['QC']],'QA':[0, 0, 0, 0],'QB':[0, 0, 0, 0],'QC':[0, 0, 0, 0],'QD':[0, 0, 0, 0]})

如果 'Extracts' 列中的任何文本与最后四个列名匹配,我希望将相应的单元格从 0 转换为 1,如下表所示: 从此:

| ID | Extracts | QA | QB| QC|QD |
|----|:--------:|----|---|---|---|
|ID_1|['QA,QB'] |0   |0  |0  |0  |
|ID_2|['QB,QD'] |0   |0  |0  |0  |
|ID_3|['QA,QD'] |0   |0  |0  |0  |
|ID_4|['QC']    |0   |0  |0  |0  |

到这里:

| ID | Extracts | QA | QB| QC|QD |
|----|:--------:|----|---|---|---|
|ID_1|['QA,QB'] |1   |1  |0  |0  |
|ID_2|['QB,QD'] |0   |1  |0  |1  |
|ID_3|['QA,QD'] |1   |0  |0  |1  |
|ID_4|['QC']    |0   |0  |1  |0  |

到目前为止,我已经尝试过遍历列:

for i in list(dfx.columns[2:6]):
    print(i)
    if dfx.Extracts.str.contains(i).any():
        dfx.i=1

但无法使其正常工作。 如果有人可以指导我完成此操作,我将不胜感激。 非常感谢。

【问题讨论】:

  • 'QA,QB' 是这样还是 'QA','QB' ?
  • 在Extracts col中,如上图:['QA,QB']

标签: python pandas dataframe


【解决方案1】:

我们可以使用str 访问器的索引来选择字符串,然后使用get_dummies 创建指标变量的数据框,最后update 使用指标数据框中的值创建原始数据框

dfx.update(dfx['Extracts'].str[0].str.get_dummies(sep=','))

print(dfx)

     ID Extracts  QA  QB  QC  QD
0  ID_1  [QA,QB]   1   1   0   0
1  ID_2  [QB,QD]   0   1   0   1
2  ID_3  [QA,QD]   1   0   0   1
3  ID_4     [QC]   0   0   1   0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多