Python 在Pandas-Output变量中应用IF条件

Python 在Pandas-Output变量中应用IF条件,python,pandas,dataframe,Python,Pandas,Dataframe,我想创建一个名为“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',

我想创建一个名为“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 = 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 '')

您使用lambda的方法不正确。使用此选项创建
texto2

texto2=[]
对于var_iss,change_iss,zip格式的verif(text_ind['var_iss_REAL'].values.tolist(),text_ind['change_iss'].values.tolist()):
如果verif=='OK':
texto2.append(f“com um{var_iss}real de{change_iss}em comparaço com 2019”)
其他:
texto2.append(“”)
text_ind['texto2']=texto2

需要修复的东西:

  • 您正在尝试使用f字符串,但忘记了
    f
    前缀
  • 如果在用单引号定义的字符串中有单引号(
    ),则必须
  • 用反斜杠
    \'
  • 字符串使用双引号,列名使用单引号(反之亦然)
  • 您在单个列上使用apply
    VERIF
    ,但您指的是其他列
    VAR\u ISS\u REAL
    change\u 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 compario com 2019”
如果x['VERIF']=='OK'其他'',
轴=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

您的最后一行显示的是data_ind而不是text_ind。您是否有一个名为data_ind的数据框?请提供一个包含您的输入和预期输出的数据框,并说明您的尝试出现了什么问题。请参阅@Scinana我们询问的问题包括问题中文本形式的样本数据,而不是屏幕截图或链接形式的样本数据,这样我们可以重现数据以帮助理解和解决问题欢迎使用StackOverflow。使用
text\u ind.head(10).到剪贴板(excel=False)
将数据框的前10行复制到剪贴板(作为文本),然后将其粘贴到问题中。请在上阅读这篇文章。还有,谢谢!问题已解决:)“感谢您的反馈!您至少需要15个声誉才能投票,但您的反馈已被记录。”