我在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个变量执行此操作。
答案 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)