if和elif条件基于数据帧的值

时间:2018-02-01 04:36:41

标签: python pandas dataframe series

我正在尝试根据数据框中存在的列创建新列。这是样本数据

     ORG   CHAIN_NBR  SEQ_NBR     INT_STATUS  BLOCK_CODE_1  BLOCK_CODE_2
0   523         1        0          A             C             A
1   523         2        1          I             A             D
2   521         3        1          A             H             F
3   513         4        1          D             H             Q
4   513         5        1          8             I             M

这是我正在执行的代码:

df=pd.read_csv("rtl_one", sep="\x01")


    def risk():
        if df['INT_STATUS'].isin(['B','C','F','H','P','R','T','X','Z','8','9']):
            df['rcut'] = '01'
        elif df['BLOCK_CODE_1'].isin(['A','B','C','D','E','F','G','I','J','K','L','M', 'N','O','P','R','U','W','Y','Z']):
            df['rcut'] = '02' 
        elif df["BLOCK_CODE_2"].isin(['A','B','C','D','E','F','G','I','J','K','L','M', 'N','O','P','R','U','W','Y','Z']):
            df['rcut'] == '03'

        else:
            df['rcut'] = '00'

    risk()

输出数据应如下所示:

     ORG   CHAIN_NBR  SEQ_NBR   INT_STATUS  BLOCK_CODE_1  BLOCK_CODE_2 rcut 
0   523         1        0          A             C             A      02
1   523         2        1          I             A             D      02
2   521         3        1          A             H             F      03
3   513         4        1          D             H             Q      00
4   513         5        1          8             I             M      01

2 个答案:

答案 0 :(得分:2)

使用iterrows并将结果存储在一个列表中,然后您可以将该列表作为列追加到数据框中:

rcut = []

for i, row in df.iterrows():
    if row['INT_STATUS'] in ['B','C','F','H','P','R','T','X','Z','8','9']:
        rcut.append('01')
    elif row['BLOCK_CODE_1'] in ['A','B','C','D','E','F','G','I','J','K','L','M', 'N','O','P','R','U','W','Y','Z']:
        rcut.append('02')
    elif row['BLOCK_CODE_1'] in ['A','B','C','D','E','F','G','I','J','K','L','M', 'N','O','P','R','U','W','Y','Z']:
        rcut.append('03')
    else:
        rcut.append('00')
df['rcut'] = rcut

(注意:您的第二和第三条件相同,我在这里重复使用您的代码,因此您必须更改它)

答案 1 :(得分:0)

使用.index添加新列,df ['rcut'] = df.index 然后在if elif条件中使用df.insert(index,'rcut',value)。