如何从 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)
大家好,我有一个简单的 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)