Хотите найти первый экземпляр каждой уникальной строки во фрейме данных. Затем создайте список, который помечается как первый уникальный экземпляр или нет - PullRequest
0 голосов
/ 11 июля 2019

Чтобы перефразировать это, я генерирую некоторые фиктивные данные. Предполагая список клиентов (некоторые с несколькими транзакциями), я хочу отметить каждого уникального клиента. Затем я создам соответствующую личную информацию, такую ​​как пол, идентификатор клиента и т. Д.

Мои шаги были: 1) Создать список всех уникальных имен 2) перебрать столбец «Имена» в моем Dataframe 3) когда значение в списке уникальных имен и в «именах» DataFrame совпадает, добавьте 1 к списку (затем удалите имя из списка уникальных имен, создавая 0 для каждого последующего экземпляра имени). Или оставьте 0, если он не совпадает.

Я пробовал несколько методов, но ни один из них не работает, этот показался мне наиболее близким, но я не смог найти ответ.

Первый фрейм данных

customers = [ ('jack', 34), 
             ('tom', 30),
             ('jack', 31),
             ('jack', 32),
             ('jon', 16),
             ('tim', 17)  ]

Создать объект DataFrame

df = pd.DataFrame(customers, columns = ['Name' , 'Age'])

1) создать список уникальных имен

uniques = df.Name.unique().tolist()
uniques

2)

worklist = []

for i in df:
    if df["Name"] == uniques[i]:
        worklist.append(i)
        uniques.remove(i)
    else:
        worklist.append(0)

print(worklist)
print(uniques)

В конце у меня должен быть список фиктивных переменных (1,0 с) [1,1,0,0,1,1] Аналогично, список уникальных имен должен быть пустым.

Однако я постоянно получаю эту ошибку.

TypeError: list indices must be integers or slices, not str

1 Ответ

0 голосов
/ 11 июля 2019

Ошибка, которую вы имеете, состоит в том, что вы не зацикливаетесь на том, что, по вашему мнению, зацикливаетесь, когда вы зацикливаетесь, вы фактически зацикливаетесь на именах столбцов («Имя» и «Возраст»), что означает, что вы запрашиваете uniques["Name"]и uniques["Age"], которые вызывают ошибку, индексы списка не являются стр.

Вы можете сделать какую-то кнопку переключателя, используя dict вместо списка для вашей uniques переменной:

customers = [ ('jack', 34), 
             ('tom', 30),
             ('jack', 31),
             ('jack', 32),
             ('jon', 16),
             ('tim', 17)  ]

df = pd.DataFrame(customers, columns = ['Name' , 'Age'])
uniques = {name: True for name in df['Name']}

worklist = []
for name in df["Name"]:
    if uniques[name]:
        worklist.append(1)
        uniques[name] = False
    else:
        worklist.append(0)

print(worklist)

Переменная uniques не пуста в конце, но заполнена ключами, которые все являются «ложными», не уверены, важно ли это, если это так, скажите мне, и я отредактирую.

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