Python 在Pandas-Output变量中应用IF条件
我想创建一个名为“texto2”的列,根据数据帧的行(称为text_ind)显示不同的结果。换句话说,我想写一条消息,以防列“VERIF”是可以的,否则我不想要任何消息。消息将根据行的不同而有所不同 数据帧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',
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个声誉才能投票,但您的反馈已被记录。”