汇总分类数据并将其转换为数字

时间:2019-06-17 07:01:41

标签: python python-3.x pandas python-2.7

我有一个数据框df_train,它的列为sub_division。

该列中的值如下所示

ABC_commercial,
ABC_Private,
Test ROM DIV,
ROM DIV,
TEST SEC R&OM

我正在尝试 1.将任何以ABC *开头的数字转换为数字(例如:1) 2.将包含ROM和R&OM的任何内容转换为数字(例如2)

谢谢。

预期结果:

1,
1,
2,
2,
2

3 个答案:

答案 0 :(得分:1)

numpy.selectSeries.str.startswithSeries.str.contains结合使用:

m1 = df['col'].str.startswith('ABC')
m2 = df['col'].str.contains('ROM|R&OM')

df['new'] = np.select([m1, m2], [1,2], default='no match')
#if need all numbers
#df['new'] = np.select([m1, m2], [1,2], default=0)
print (df)
               col new
0  ABC_commercial,   1
1     ABC_Private,   1
2    Test ROM DIV,   2
3         ROM DIV,   2
4    TEST SEC R&OM   2

答案 1 :(得分:0)

您可以执行以下操作。请记住,如果没有匹配项,您将得到NaN。您可以在else函数中添加converter大小写,以获取默认值。

def converter(v):
    if v.startswith('ABC'):
        return 1
    elif any(i in v for i in ['ROM', 'R&OM']):
        return 2

df['sub_division'] = df['sub_division'].apply(converter)
print(df.head(10))

输出:

   sub_division
0             1
1             1
2             2
3             2
4             2

答案 2 :(得分:0)

您可以使用:

Collection