python-3.x - 在列中使用多个条件来准备分析
问题描述
我使用以下条件来准备数据框进行分析。
def DAYS(DF_FRAME_NAME):
if (DF_FRAME_NAME['Column1'] == 'Yes' and (DF_FRAME_NAME['DAYS'] == 1)):
return 3
elif (DF_FRAME_NAME['Column1'] == 'Yes' and (DF_FRAME_NAME['DAYS'] == 2)):
return 3
if (DF_FRAME_NAME['Column2'] == 'YES' and (DF_FRAME_NAME['DAYS'] == 1)):
return 3
elif (DF_FRAME_NAME['Column2'] == 'YES' and (DF_FRAME_NAME['DAYS'] == 2)):
return 3
elif (DF_FRAME_NAME['Column2'] == 'YES' and (DF_FRAME_NAME['DAYS'] == 3)):
return 5
elif (DF_FRAME_NAME['Column2'] == 'YES' and (DF_FRAME_NAME['DAYS'] == 4)):
return 5
elif (DF_FRAME_NAME['Column2'] == 'YES' and (DF_FRAME_NAME['DAYS'] == 5)):
return 5
elif (DF_FRAME_NAME['Column1'] != 'Yes'):
return DF_FRAME_NAME['DAYS']
elif (DF_FRAME_NAME['Column2']) != 'YES':
return DF_FRAME_NAME['DAYS']
df['DAYS'] = df.apply(DAYS, axis =1)
上述函数会消耗时间,因此在@deadshot 的帮助下,我将代码重写如下:
DF['DAYS']=np.where((DF['column1'].eq('Yes')) &(DF['DAYS'].eq(1)),3,DF[‘DAYS’])
DF[‘DAYS’]=np.where((DF[‘column1’].eq('Yes')) & (DF[‘DAYS’].eq(2)),3,DF[‘DAYS’])
DF[‘DAYS’]=np.where((DF[‘column2’].eq('YES')) & (DF[‘DAYS’].eq(1)),3,DF[‘DAYS’])
DF[‘DAYS’]=np.where((DF[‘column2’].eq('YES')) & (DF[‘DAYS’].eq(2),3,DF[‘DAYS’])
DF[‘DAYS’]=np.where((DF[‘column2’].eq('YES')) & (DF[‘DAYS’].eq(3)),5,DF[‘DAYS’])
DF[‘DAYS’]=np.where((DF[‘column2’].eq('YES')) & (DF[‘DAYS’].eq(5)),5,DF[‘DAYS’])
DF[‘DAYS’]=np.where((DF[‘column2’].eq('YES')) & (DF[‘DAYS’].eq(5)),5,DF[‘DAYS’])
DF[‘DAYS’]=np.where(DF[‘column1’].eq('No'),DF[‘DAYS’],1)
DF[‘DAYS’]=np.where(DF[‘column2’].eq('No'),DF[‘DAYS’],1)
当应用于超过 200,000 行的数据帧时,上述代码的性能要快得多。但这是正确的方法吗?我可以在 where 函数中使用自定义函数吗?请帮助如何编写更有吸引力的上述代码,因为有许多条件适用于同一列。
解决方案
推荐阅读
- python - PyGame边界碰撞检测不起作用
- python - 如何从合并列生成键数组:值
- solidity - 指定的输入源无效
- ruby-on-rails - Rails:如何创建数据库级别索引以支持'validates_uniqueness_of:user_id,范围:[:flaggable_id,:flaggable_type]'
- xamarin - 如何通过不使用 Android 选项来禁用共享单声道运行时?
- php - 如何在后台执行 PHP 脚本?
- python - 将图像裁剪为 PyQt 的圆形
- c# - Tweetinvi 接收推文很慢?备择方案?
- node.js - 如果我要对 if 子句中发生的事情进行单元测试,我应该将所有内容模拟到 if 子句中吗?
- awk - 过滤掉文件 2 中的行,因为文件 2 的列值在文件 1 的第 2 列和第 3 列的值范围内,以获得相似的 chr 值