如何根据数据框中的条件填充列?

时间:2020-05-28 09:46:58

标签: python python-3.x pandas dataframe

我正在尝试根据某种条件将记录填充为一列,但没有得到结果。你能帮我怎么做吗?

示例:

df:

applied_sql_function1     and_or_not_oprtor_pre    comb_fld_order_1
 CASE WHEN                                    
 WHEN                      AND                     
 WHEN                      AND                          
 WHEN                      
 WHEN                      AND
 WHEN                      OR                      
 WHEN  
 WHEN                                                 dummy
 WHEN                                                 dummy
 WHEN

预期输出:

applied_sql_function1     and_or_not_oprtor_pre    comb_fld_order_1     new
 CASE WHEN                                                              CASE WHEN
 WHEN                      AND                                      
 WHEN                      AND                          
 WHEN                                                                   WHEN
 WHEN                      AND
 WHEN                      OR                      
 WHEN                                                                   WHEN
 WHEN                                                 dummy
 WHEN                                                 dummy
 WHEN                                                                   WHEN

我已经为此写了一些逻辑,但是它不起作用:

            df_main1['new'] =''
            for index,row in df_main1.iterrows():
                new = ''
                if((str(row['applied_sql_function1']) != '') and (str(row['and_or_not_oprtor_pre']) == '') and (str(row['comb_fld_order_1']) == '')):
                    new += str(row['applied_sql_function1'])
                    print(new)

                if(str(row['applied_sql_function1']) != '') and (str(row['and_or_not_oprtor_pre']) != ''):
                    new += ''
                    print(new)

                else:
                    new += ''

                row['new'] = new

            print(df_main1['new'])

3 个答案:

答案 0 :(得分:0)

始终与np.where一起去!它易于理解和向量化,因此在非常大的数据集上表现良好。

import pandas as pd, numpy as np
df['new'] = ''
df['new'] = np.where((df['and_or_not_oprtor_pre'] == '') & (df['comb_fld_order_1'] == ''), df['applied_sql_function1'], df['new'])
df

答案 1 :(得分:0)

使用loc

mask = df.and_or_not_oprtor_pre.fillna("").eq("") \
       & df.comb_fld_order_1.fillna("").eq("")

df.loc[mask, 'new'] = df.loc[mask, 'applied_sql_function1']

答案 2 :(得分:0)

尝试一下,它会快速运行

indexes = df.index[(df['and_or_not_oprtor_pre'].isna()) & (df['comb_fld_order_1'].isna())]
df.loc[indexes, 'new'] = df.loc[indexes, 'applied_sql_function1']