为什么在pandas数据帧中组合elif else,str.contains和.any()会给我统一的结果?

时间:2017-08-28 03:53:42

标签: python-3.x pandas numpy if-statement dataframe

我尝试根据前一列中包含的文本为数据集中的每一行创建新的标签,以下是我的代码

import pandas as pd
import numpy as np
data = pd.read_excel('C:\\Users\\data july 2017.xlsx')
#data['Description'].fillna('')
pawoon = data[data['Description'].str.contains('Pawoon')]
pawoon['time'] = "0"
if pawoon.Description.str.contains('1 Bulan').any():
    pawoon['time'] = 1
elif pawoon.Description.str.contains('3 Bulan').any():
    pawoon['time'] = 3
elif pawoon.Description.str.contains('6 bulan').any():
    pawoon['time'] = 6
elif pawoon.Description.str.contains('1 Tahun').any():
    pawoon['time'] = 1
else:
    pawoon['time'] = 0

当我打印上面代码的部分结果时,这是我得到的部分结果

Pawoon POS Software (1 Bulan)   1
Software Pawoon (6 bulan)       1
Pawoon POS Software (1 Tahun)   1
Pawoon POS Software (3 Bulan)   1
Pawoon POS Software (1 Bulan)   1

我期望的结果如下所示(基于我在代码中提到的elif else语句)

Pawoon POS Software (1 Bulan)   1
Software Pawoon (6 bulan)       6
Pawoon POS Software (1 Tahun)   12
Pawoon POS Software (3 Bulan)   3
Pawoon POS Software (1 Bulan)   1

为什么会这样?如何获得我想要的结果? 我想.any()应该更改,但如果我统一更改为.all每个结果0

2 个答案:

答案 0 :(得分:1)

尝试类似

的内容
 #Practice data frame
df = pd.DataFrame({'description':list('abc')})

 #Initialize the column
df['time'] = -1

 #Just one example of how to do this
df.loc[df.description.str.contains('a'),'time'] = 10

结果是

description time
a           10
b           -1
c           -1

您的问题是您是通过df['time'] = 1更改整个列。 loc是实现这一目标的更好方法。

答案 1 :(得分:1)

如果需要多个if else语句,您可以使用numpy.select

m1 = pawoon.Description.str.contains('1 Bulan')
m2 = pawoon.Description.str.contains('3 Bulan')
m3 = pawoon.Description.str.contains('6 Bulan')
m4 = pawoon.Description.str.contains('1 Tahun')

pawoon['time'] = np.select([m1,m2,m3,m4], [1,3,6,12], default=0)
print (pawoon)
                     Description  time
0  Pawoon POS Software (1 Bulan)     1
1      Software Pawoon (6 Bulan)     6
2  Pawoon POS Software (1 Tahun)    12
3  Pawoon POS Software (3 Bulan)     3
4  Pawoon POS Software (1 Bulan)     1