我对python (来自R)很陌生,我不知道如何在python中迭代数据帧。我在下面提供了一个数据框架和一份可能的“干预”清单。我要做的是搜索数据框架中的“干预”列,如果干预在"intervention_list“中,则将值替换为”是干预“,但如果"NaN”替换为“不干预”。
如有任何指导或帮助,将不胜感激。
import pandas as pd
intervention_list = ['Intervention 1', 'Intervention 2']
df = pd.DataFrame({'ID':[100,200,300,400,500,600,700],
'Intervention':['Intervention 1', 'NaN','NaN','NaN','Intervention 2','Intervention 1','NaN']})
print(df)我希望已完成的数据框架如下所示:
df_new = pd.DataFrame({'ID':[100,200,300,400,500,600,700],
'Intervention':['Yes Intervention', 'No Intervention','No Intervention','No Intervention','Yes Intervention','Yes Intervention','No Intervention']})
print(df_new)谢谢!
发布于 2019-02-14 06:38:18
在熊猫中最好避免循环,因为速度慢,所以使用numpy.where和Series.isna或Series.notna所缺少的测试值作为矢量化解决方案:
df['Intervention'] = np.where(df['Intervention'].isna(),'No Intervention','Yes Intervention')或者:
df['Intervention'] = np.where(df['Intervention'].notna(),'Yes Intervention','No Intervention')如果NaN是字符串,则由==或Series.eq进行测试。
df['Intervention']=np.where(df['Intervention'].eq('NaN'),'No Intervention','Yes Intervention')但如果需要在列表中进行测试,请使用numpy.select
m1 = df['Intervention'].isin(intervention_list)
m2 = df['Intervention'].isna()
#if not match m1 or m2 create default None
df['Intervention'] = np.select([m1, m2],
['Yes Intervention','No Intervention'],
default=None)#if not match m1 or m2 set original value column Intervention
df['Intervention'] = np.select([m1, m2],
['Yes Intervention','No Intervention'],
default=df['Intervention'])https://stackoverflow.com/questions/54684480
复制相似问题