如果Contains()为True,Python将值赋值给新列

时间:2015-04-19 03:23:02

标签: python python-2.7 pandas

如果列包含特定字符串,我如何使用str.contains()方法检查列,如果在另一列中为true,则指定值?从本质上讲,我试图在SQL中模仿一个CASE WHEN LIEN THEN语法但在pandas中。对python和pandas来说真的很新,并感谢任何帮助!从本质上讲,我想搜索“来源”#39;对于视频,音频,默认和如果找到,则类型将是视频,音频,默认相应。我希望这是有道理的!

Source                 Type
video1393x2352_high    video
audiowefxwrwf_low      audio
default2325_none       default
23234_audio            audio

3 个答案:

答案 0 :(得分:3)

使用str.extract方法...将正则表达式作为参数...将匹配的组作为字符串返回...

df['Type'] = df.Source.str.extract('(video|audio|default)')

对于某些区分大小写,您可以添加...

df['Type'] = df.Source.str.lower().str.extract('(video|audio|default)')

示例,包括不匹配......

In [24]: %paste
import pandas as pd

data = """
Source
video1393x2352_high
audiowefxwrwf_low
default2325_none
23234_audio
complete_crap
AUDIO_upper_case_test"""

from StringIO import StringIO # import from io for python 3
df = pd.read_csv(StringIO(data), header=0, index_col=None)

df['Type'] = df.Source.str.lower().str.extract('(video|audio|default)')
## -- End pasted text --

In [25]: df
Out[25]: 
                  Source     Type
0    video1393x2352_high    video
1      audiowefxwrwf_low    audio
2       default2325_none  default
3            23234_audio    audio
4          complete_crap      NaN
5  AUDIO_upper_case_test    audio

答案 1 :(得分:0)

尝试使用numpy.wherepandas.DataFrame.where。两者都采用布尔数组并基于此有条件地分配。

In [4]: np.where([True, False, True], 3, 4)
Out[4]: array([3, 4, 3])

http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.where.html

您将使用str.contains构造布尔数组,然后将其传递给where方法。

答案 2 :(得分:0)

尝试类似: -

import re
input_values = ['video1393x2352_high', 'audiowefxwrwf_low', 'default2325_none', '23234_audio']
pattern = re.compile('audio|video|default') 
res_dict = {}
for input_val in input_values:
    type = pattern.findall(input_val)
    if type:
        res_dict[input_val] = type[0]

print res_dict #{'23234_audio': 'audio', 'audiowefxwrwf_low': 'audio', 'video1393x2352_high': 'video', 'default2325_none': 'default'}