【发布时间】:2021-12-30 02:58:21
【问题描述】:
我在数据框中有几列具有绿色/黄色/红色值:
示例:
| Date | Index1 | Index2 |
|---|---|---|
| 20-Dec-21 | Green | Yellow |
| 21-Dec-21 | Red | Yellow |
我想在此数据框中再添加一列,首先根据逻辑为每一列分配一个分数:如果绿色,则得分 = 1,如果黄色,则为 0.5,如果红色,则为 0,然后将这些单独的分数相加以产生最终分数.例如。对于第 1 行,得分 = 1+0.5 = 1.5,对于第 2 行得分 = 0+0.5 =0.5,依此类推。
func 本身很容易写:
def color_to_score(x):
if (x=='Green'):
return 1
elif (x=='Yellow'):
return 0.5
else: return 0
但我正在努力将其应用于每一列,然后将结果分数添加到各列中,以一种优雅的方式生成一个新分数。 我显然可以这样做:
df['Index1score'] = df['Index1'].apply(color_to_score)
为每个相关列生成一个分数列,然后添加它们,但这是非常不雅且不可扩展的。寻求帮助。
【问题讨论】:
-
您为什么认为这是“不优雅且不可扩展”?我不同意这两种说法。您有一个语句从现有数据创建一个全新的列。
-
你可以使用
replace;例如df['Index1score'] = df['Index1'].replace({'Green': 1, 'Yellow': 0.5, 'Red': 0}, regex=True) -
所以对于最终的(综合)得分,我可以这样说:``` df['score'] = (df['Index1'].apply(color_to_score) + df['Index1 '].apply(color_to_score)) + ..... ``` 但是一旦列数超过某个否,这个解决方案就不是很优雅。所以可能我在这里缺少一个技巧来指定所有列名。