Панды Переименовать один столбец Значения, если они не равны нескольким условиям - PullRequest
0 голосов
/ 25 июня 2018

Я новичок в кодировании и 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-УД

A-02-УД

А-03-УД

T-00-УД

T-01-УД

T-02-УД

T-03-УД

A-45-TR * +1021 * * * 1 022 S-30-РТ * * одна тысяча двадцать три

D-20-ED * * тысяча двадцать пять

V-00-LM

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы можете использовать словарь для сопоставления первого символа 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
0 голосов
/ 25 июня 2018

Используйте numpy.select с isin для точного соответствия:

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
...