条件语句并在Dataframe中拆分

时间:2016-11-04 16:28:58

标签: python pandas if-statement dataframe split

我在python中寻找一个条件语句来查找指定列中的某个信息并将结果放在一个新列中

以下是我的数据集示例:

OBJECTID    CODE_LITH
1              M4,BO
2              M4,BO
3              M4,BO
4              M1,HP-M7,HP-M1

以及我想要的结果:

OBJECTID    CODE_LITH           M4   M1
1              M4,BO            1    0
2              M4,BO            1    0
3              M4,BO            1    0
4              M1,HP-M7,HP-M1   0    1

到目前为止我做了什么:

import pandas as pd
import numpy as np
lookup = ['M4']
df.loc[df['CODE_LITH'].str.isin(lookup),'M4'] = 1
df.loc[~df['CODE_LITH'].str.isin(lookup),'M4'] = 0

因为" CODE_LITH"每行中有多个变量。似乎脚本不能只找到" M4"它可以找到" M4,BO"并在新列中放入1或0

我也尝试过:

if ('M4') in df['CODE_LITH']: 
    df['M4'] = 0
else:
    df['M4'] = 1

结果相同。

感谢您的帮助。

PS。数据帧包含大约260万行,我需要对30-50个变量执行此操作。

3 个答案:

答案 0 :(得分:0)

使用str.contains访问者:

>>>> for key in ('M4', 'M1'):
...      df.loc[:, key] = df['CODE_LITH'].str.contains(key).astype(int)

>>> df
   OBJECTID       CODE_LITH  M4  M1
0         1           M4,BO   1   0
1         2           M4,BO   1   0
2         3           M4,BO   1   0
3         4  M1,HP-M7,HP-M1   0   1

答案 1 :(得分:0)

我能够做到:

for index,data in enumerate(df['CODE_LITH']):
    if "I1" in data:
        df['Plut_Felsic'][index] = 1
    else:
        df['Plut_Felsic'][index] = 0

它确实有效,但需要相当长的时间来计算。

答案 2 :(得分:0)

我认为这是Pythonic的做法:

for mn in ['M1', 'M4']: # Add other "M#" as needed
    df[mn] = df['CODE_LITH'].map(lambda x: mn in x)