На основе условия сопоставьте и замените значения столбца - PullRequest
1 голос
/ 30 апреля 2020

У меня есть следующее Series object извлеченное из dataframe df1.

df1['K'][25:35]

25     26
26     27
.......
33    UT5
34    XYZ
Name: K, dtype: object

Я хочу преобразовать значения 'K' в 'U', если строковое значение начинается с 'U'. Иначе, если он начинается с «1» или «2» (строка), я хочу заменить на «S». Иначе, я хочу оставить значение без изменений. Что-то вроде:

25      S
26      S
.......
33      U
34    XYZ

Я пытался иначе, но не получил результата. Я точно знаю, что код для назначения значений не является правильным. Есть предложения?

if (df1['K'].str[0].isin(['1','2'])):
    df1['K'].str='S'
elif (df1['K'].str[0].isin(['U'])):)
    df1['K'].str='U'

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

1 Ответ

4 голосов
/ 30 апреля 2020

Используйте numpy.select с параметром default с тем же столбцом (возвращаемые значения при отсутствии совпадений), для второй маски можно использовать Series.eq, поскольку сравнивалось только одно значение:

s = df1['K'].str[0]
m1 = s.isin(['1','2'])
m2 = s.eq('U')

Другая идея - использовать Series.str.startswith для масок:

m1 = df1['K'].str.startswith(('1','2'))
m2 = df1['K'].str.startswith('U')

df1['K'] = np.select([m1, m2], ['S','U'], default=df1['K'])
print (df1)
      K
25    S
26    S
33    U
34  XYZ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...