python中的条件填充逻辑

2024-09-22 14:31:19 发布

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

我有一个pandas数据帧,我创建了一个掩码,将一个序列过滤到一个特定的操作类型。最后,我将进行分组聚合,但在此之前,我需要对数据进行质量控制,以便正确分组。所以我遇到的问题是,我的操作类别有一些随机空值,我需要更改,所以我需要做的是检查上一个和下一个操作,然后如果两者都相同,那么我需要将当前节点更改为该操作类型。你知道吗

注:这是一个时间序列数据帧

我正在尝试优化这个方法,因为最终的数据集可能会很大。我试过apply和lambda函数,但它们不能正常工作…可能是用户错误。你知道吗

def prep_rot_data(ops_rot_cur, ops_rot_lag, ops_rot_lead):
    # psuedo code
    '''
        if ops_rot_cur == rotate then return 'rotate'
        elif ops_rot_cur == None and ops_rot_lag == 'rotate' and ops_rot_lead == 'rotate' then return 'rotate'
    '''
    if 'rotate' in ops_rot_cur :
        return 'rotate'
    elif 'na' in ops_rot_cur and 'rotate' in ops_rot_lag and 'rotate' in ops_rot_lead:
        return 'rotate'

  c_df['rig_ops_rot'] = np.where(c_df['operation'] == 'Rotary Drill','rotate', None)              # rotate ops mask
            #c_df['rig_ops_rot_test'] = c_df.apply(lambda x: prep_rot_data(x['rig_ops_rot'], x['rig_ops_rot'].shift(1), x['rig_ops_rot'].shift(-1)), axis=1)

我不确定计算多条件签入的最有效方法是什么,因此可能有更有效的方法来执行此操作。我希望操作在解释正确的结果之前同时检查滞后节点和超前节点


Tags: and数据方法indfreturn节点序列
1条回答
网友
1楼 · 发布于 2024-09-22 14:31:19

您想要的输出不够清晰,但是可以处理多个条件1.数据帧对象,如伪代码所示

'''
    if ops_rot_cur == rotate then return 'rotate'
    elif ops_rot_cur == None and ops_rot_lag == 'rotate' and ops_rot_lead == 'rotate' then return 'rotate'
'''

您可以尝试以下操作,假设您的dfmy\u df包含ops\u rot\u cur、ops\u rot\u lag和ops\u rot\u lead列

my_df['rig_ops_rot'] = ''
cond1 = my_df['ops_rot_cur'].str.contains('rotate')
cond2 = (my_df['ops_rot_cur'].isna())&(my_df['ops_rot_lag'].str.contains('rotate'))&\
        (my_df['ops_rot_lead'].str.contains('rotate'))
my_df[cond1] = 'rotate'
my_df[cond2] = 'rotate'

,或者

def get_rig_ops_rot(row):
    if 'rotate' in row['ops_rot_cur']:
        row['rig_ops_rot'] = 'rotate'
    elif 'na' in row['ops_rot_cur'] and 'rotate' in row['ops_rot_lag'] and 'rotate' in row['ops_rot_lead']:
        row['rig_ops_rot'] = 'rotate'
    return row

my_df = my_df.apply(get_rig_ops_rot, axis=1)

相关问题 更多 >