在结果变量中应用IF条件

2024-06-09 00:37:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个名为“texto2”的列,根据数据帧的行(称为text_ind)显示不同的结果。换句话说,我想写一条消息,以防列“VERIF”是可以的,否则我不想要任何消息。消息将根据行的不同而有所不同

数据帧

text_ind = pd.DataFrame({'ISS_2019': [10, 20, 50], 'ISS_2020': [11, 24, 40],
'change_ISS': ['10%', '20%', '-20%'],
'VAR_ISS_REAL': ['crescimento', 'crescimento', 'queda']})

所需数据帧

text_ind = pd.DataFrame({'ISS_2019': [10, 20, 50],'ISS_2020': [11, 24, 40],
'change_ISS': ['10%', '20%', '-20%'], 'VAR_ISS_REAL': ['crescimento', 'crescimento', 'queda'],
'texto2': ['com um crescimento real de 10% em comparao com 2019', 'com um crescimento real de 20% em comparaocom 2019', 'com uma queda real de 20% em comparao com 2019']})

剧本

text_ind['FLAG'] = pd.notnull(text_ind[text_ind.columns[1:2]]).astype(int)    
text_ind['FLAG2'] = pd.notnull(text_ind[text_ind.columns[2:3]]).astype(int)
text_ind.loc[text_ind['FLAG'] == 1, 'VERIF'] = 'OK'
text_ind.loc[text_ind['FLAG2'] == 1, 'VERIF'] = 'OK'

text_ind['texto2'] = text_ind['VERIF'].apply(lambda x: 'com um(a) {x['VAR_ISS_REAL']} 
real de {x['change_ISS']} em comparação com 2019' if x == 'OK' else '')

invalid syntax error message


Tags: 数据textcom消息vardechangereal
2条回答

需要修理的东西:

  • 您正在尝试使用f字符串,但忘记了f前缀
  • 如果在用单引号定义的字符串中有单引号('),则必须
    1. 用反斜杠转义它\'
    2. 字符串使用双引号,列名使用单引号(反之亦然)
  • 您在单个列VERIF上使用apply,但您引用的是其他列VAR_ISS_REALchange_ISS

我对您的.apply进行了以下更改,使其基本保持不变:

  • 我在整个数据帧上使用apply
  • 使用axis=1以便逐行处理(因此x现在是行)
  • (额外换行以提高可读性)
text_ind['texto2'] = text_ind.apply(
    lambda x: f"com um(a) {x['VAR_ISS_REAL']} real de {x['change_ISS']} em comparao com 2019"
              if x['VERIF'] == 'OK' else '',
    axis=1)

输出:

   ISS_2019  ISS_2020 change_ISS VAR_ISS_REAL  FLAG  FLAG2 VERIF                                                  texto2
0        10        11        10%  crescimento     1      1    OK  com um(a) crescimento real de 10% em comparao com 2019
1        20        24        20%  crescimento     1      1    OK  com um(a) crescimento real de 20% em comparao com 2019
2        50        40       -20%        queda     1      1    OK       com um(a) queda real de -20% em comparao com 2019

您使用lambda的方法不正确。改为使用它来创建texto2

texto2 = []
for var_iss, change_iss, verif in zip(text_ind['VAR_ISS_REAL'].values.tolist(), text_ind['change_ISS'].values.tolist(), text_ind['VERIF'].values.tolist()):
  if verif == 'OK':
    texto2.append(f"com um {var_iss} real de {change_iss} em comparação com 2019")
  else:
    texto2.append('')

text_ind['texto2'] = texto2

相关问题 更多 >