这是我的情况的一个淡化版本。我在一个不能修改的代码环境中工作。在后端,有一个类似于add_sigma
的函数。我需要分配函数来跨"value“列包含特定字符串的行执行。这个函数本身迫使我输入一个布尔表达式。有什么办法可以解决这个问题吗?
import pandas as pd
import numpy as np
def add_sigma(percent):
if percent >= 99.9997:
return 6
elif percent <= 99.9996 and percent >= 99.98:
return 5
elif percent <= 99.979 and percent >= 99.4:
return 4
elif percent <= 99.39 and percent >= 93.3:
return 3
elif percent <= 93.29 and percent >= 69.1:
return 2
elif percent <= 69.09 and percent >= 30.9:
return 1
elif percent <= 30.89 and percent >= 0:
return 0
df = pd.DataFrame({'value': ['0-3 bucket', '4-7 bucket', '8+ bucket', '0-3 bucket', '0-3 bucket', '8+ bucket'],
'percentage': [27.68, 82.94, 32.26, 91.97, 99.82, 67.44]})
df['sigma'] = ''
df['sigma'] = np.where(df['value'] == '0-3 bucket', add_sigma(df['percentage']), df['sigma'])
预期输出将为
value percentage sigma
0 0-3 bucket 27.68 0
1 4-7 bucket 82.94
2 8+ bucket 32.26
3 0-3 bucket 91.97 2
4 0-3 bucket 99.82 4
5 8+ bucket 67.44
发布于 2021-01-08 09:28:35
正如cs95所说,您可以使用条件并调用add_sigma函数。一种方法是将条件包含在apply中,如下所示:
df['sigma'] = df.apply(lambda x: add_sigma(x.percentage) if x['value'] == '0-3 bucket' else '',axis=1)
结果将是:
value percentage sigma
0 0-3 bucket 27.68 0
1 4-7 bucket 82.94
2 8+ bucket 32.26
3 0-3 bucket 91.97 2
4 0-3 bucket 99.82 4
5 8+ bucket 67.44
使用.loc,您可以执行以下操作:
df.loc[df['value'] == '0-3 bucket' , 'sigma'] = df['percentage'].map(add_sigma)
df['sigma'] = df['sigma'].fillna('')
https://stackoverflow.com/questions/65622019
复制相似问题