Панды получают максимальный идентификатор в строках и добавляют в пустые строки

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

Я пытаюсь автоматически добавлять идентификатор # к каждой строке в фрейме данных pandas.

пример:

    ID Ticker
0   0   AAPL
1   0   TSLA
2   0   GOOG
 

Столбец ‘ID’ должен автоматически заполняться следующим образом:

вывод:

    ID Ticker
0   1   AAPL
1   2   TSLA
2   3   GOOG
 

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

пример кода:

 import pandas as pd

df1 = pd.DataFrame({'ID': [0, 0, 0],
                'Ticker': ['AAPL', 'TSLA', 'GOOG']})
print(df1)

output = pd.DataFrame({'ID': [1, 2, 3],
                'Ticker': ['AAPL', 'TSLA', 'GOOG']})

print(output)
 

Спасибо!

Ответ №1:

Попробуй это,

 df['ID'] = df.index   1
 

При этом значение index 1 добавляется в столбец ID, если ваш index номер указан правильно

Комментарии:

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

Ответ №2:

Это даст каждому тикеру уникальный числовой идентификатор

 df1['ID'] = df1['Ticker'].astype('category').cat.codes
 

Комментарии:

1. Спасибо за ваш комментарий. К сожалению, мне не нужно классифицировать тикеры по идентификационному номеру, но спасибо, что подумали и добавили это в сообщение.

Ответ №3:

 import pandas as pd

df1 = pd.DataFrame({'ID': [0, 0, 0],
                'Ticker': ['AAPL', 'TSLA', 'GOOG']})

df1.ID = [x for x in range(1, len(df1.values) 1)]

print(df1)
 
    ID Ticker
0   1   AAPL
1   2   TSLA
2   3   GOOG

 

Комментарии:

1. Пожалуйста, не публикуйте только код в качестве ответа, но также предоставьте объяснение, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением обычно более полезны и более высокого качества и с большей вероятностью привлекут голоса.