熊猫重命名一列值不等于多个条件时的值

时间:2018-06-24 21:02:29

标签: python pandas rename

我是编码和Pandas的新手,我们将不胜感激。 我有一列希望重命名值位置A-00-UD,A-01-UD,A-02-UD =审核,T-00-UD,T-02-UD,T-03-UD =运输和所有其他值将=库存。我遇到的问题是将所有其他值都命名为Stock,因为完整数据框列中的行长为15,000行,并且有数百个我希望命名为Stock的不同位置。

位置

A-00-UD

A-01-UD

A-02-UD

A-03-UD

T-00-UD

T-01-UD

T-02-UD

T-03-UD

A-45-TR

S-30-RT

D-20-ED

V-00-LM

2 个答案:

答案 0 :(得分:1)

您可以使用字典来映射Location的第一个字符:

mapper = {'A': 'Audit', 'T': 'Transit'}

df['Location'] = df['Location'].str[0].map(mapper).fillna('Stock')

或者,使用numpy.select,您可以指定条件,每个条件的值和默认值:

df = pd.DataFrame({'Location': ['A-00-UD', 'T-01-UD', 'S-30-RT']})

conditions = [df['Location'].str[0] == 'A', df['Location'].str[0] == 'T']
values = ['Audit', 'Transit']

df['Location'] = np.select(conditions, values, 'Stock')

print(df)

  Location
0    Audit
1  Transit
2    Stock

答案 1 :(得分:0)

使用numpy.selectisin进行完全匹配:

m1 = df['Location'].isin(['A-00-UD', 'A-01-UD', 'A-02-UD'])
m2 = df['Location'].isin(['T-00-UD', 'T-02-UD', 'T-03-UD'])

或使用startswith作为检查第一个值:

m1 = df['Location'].str.startswith('A')
m2 = df['Location'].str.startswith('T')

df['new'] = np.select([m1, m2], ['Audit', 'Transit'], default='Stock')
print (df)
   Location      new
0   A-00-UD    Audit
1   A-01-UD    Audit
2   A-02-UD    Audit
3   A-03-UD    Audit
4   T-00-UD  Transit
5   T-01-UD  Transit
6   T-02-UD  Transit
7   T-03-UD  Transit
8   A-45-TR    Audit
9   S-30-RT    Stock
10  D-20-ED    Stock
11  V-00-LM    Stock