【发布时间】:2017-10-24 23:13:30
【问题描述】:
如果可能的话,我很难用 lambda 缩短我的代码。 bp 是我的数据名称。
我的数据如下所示:
user label
1 b
2 b
3 c
我希望有
user label Y
1 b 1
2 b 1
3 c 0
这是我的代码:
counts = bp['Label'].value_counts()
def score_to_numeric(x):
if counts['b'] > counts['s']:
if x == 'b':
return 1
else:
return 0
else:
if x =='b':
return 0
else:
return 1
bp['Y'] = bp['Label'].apply(score_to_numeric) # apply above function to convert data
这是一个函数将名为“标签”的列中的分类数据“b”或“s”转换为数字数据:0或1。counts = bp['Label'].value_counts()行计算列中“b”或“s”的数量'标签'。然后,在score_to_numeric 中,如果 'b' 的计数大于 's',则在名为 'Y' 的新列中将值 1 赋予 b,反之亦然。
我想将我的代码最多缩短为 3-4 行。我想也许使用 lambda 语句可以做到这一点,但我对 lambdas 还不够熟悉。
【问题讨论】:
-
暂时忘记缩短代码。您在每次调用到
score_to_numeric时重新计算bd['Label'].value_counts()。 -
我认为向我们展示您的数据和大约 5-10 行的预期输出比展示一个函数并要求某人对其进行优化更有帮助。