如何从 pandas 中括号中包含特定列名称的行创建新列

how to create a new column from a row containing specific column name in brackets in pandas

大家好,我有一个简单的 df,如上所示。目标列包含使用来自其他 table

的 lambda 创建的列名称
targetmain['Target']=targetmain.apply(lambda row: row[row == 1].index.tolist() , axis=1)

我想做的是基于名为“Primary”的目标列创建一个新列,检查目标是什么以及与相应列匹配的数字。 (例如,对于 Joe,“Primary”列应为 5,jack 2,avarel 0,william 8)

另外,如果括号有问题,我也可以删除它们。

首先通过选择第一个值删除列表,然后使用 lookup:

targetmain['Target'] = targetmain['Target'].str[0]

idx, cols = pd.factorize(targetmain['Target'])
df['Primary'] = targetmain.reindex(cols, axis=1).to_numpy()[np.arange(len(targetmain)), idx]

旧 pandas 版本使用 DataFrame.lookup:

targetmain['Target'] = targetmain['Target'].str[0]
targetmain['Primary'] = targetmain.lookup(targetmain.index, targetmain['Target'])

考虑到 Target 列中的值是字符串:

def primaryCount(row):
    row['Primary'] = row[row['Target']]
    return row

targetmain = targetmain.apply(primaryCount, axis=1)

您可能需要转换您的 Target 值,就像 @jezrael 事先建议的那样:

targetmain['Target'] = targetmain['Target'].str[0]

编辑:可以简化此解决方案:

df['Primary'] = df.apply(lambda row: row[row['Target']], axis=1)