Автоматический поиск индекса элемента списка, который содержится в определенном столбце панд для каждой строки - PullRequest
1 голос
/ 09 июня 2019

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

Представьте, что у меня есть список с names = ["U9", "Z9", "H10"] и фрейм данных pandas со столбцом, который содержит следующее

dat['col1'] = ["U9", "U9", "U9", "Z9", "Z9", "H10", "H10", "H10", "H10", "H10"] 

Я пытаюсь заменить первый код вторым, который начинаетсяоднако из маски я получаю следующую ошибку:


for i in range(len(dat)):
    index = names.index(dat['col1'][i])
    if index < len(names)-1:
        dat.loc[i, 'col2'] = names[index + 1]
    else:
        break

mask = []

for i in range(len(dat)):
    mask.append(names.index(dat['col1'][i]) < len(names) - 1)


dat['col2'] = np.where(mask, names[names.index(dat['col1'])+1], np.NaN)

Я получаю ошибку:

ValueError: Истинное значение Series является неоднозначным.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Это происходит потому, что names[names.index(dat['col1'])+1] не выполняет итерацию для каждой строки в dat['col1'].

Так что я хочу, чтобы итерация по строкам в пандах без использования для которогоупоминается ниже и присваивает dat['col2'] значения dat['col1'], но смещенные.Ожидаемый результат должен быть как

dat['col2'] = ["Z9", "Z9", "Z9", "H10", "H10", nan, nan, nan, nan, nan]

1 Ответ

0 голосов
/ 09 июня 2019

вы можете использовать series.map() после создания диктата из списка:

d={a:b for a,b in zip(names,names[1:])}
#{'U9': 'Z9', 'Z9': 'H10'}
dat['col2']=dat.col1.map(d)

0     Z9
1     Z9
2     Z9
3    H10
4    H10
5    NaN
6    NaN
7    NaN
8    NaN
9    NaN

Используя get, вы также можете получить индекс против значений:

pd.Series(d).get(dat.col1)

col1
U9      Z9
U9      Z9
U9      Z9
Z9     H10
Z9     H10
H10    NaN
H10    NaN
H10    NaN
H10    NaN
H10    NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...