Здравствуйте, я пытаюсь сделать список поиска, что с учетом listID я могу найти пользователей, которые имеют его, и с учетом UserID я могу найти все списки этого пользователя.
Данные поступают в следующем формате:
[['34', '345'],
['12', '23,534,34'],
['1', '13,42']]
То, что я хотел бы, это информационный кадр панд, который выглядит как:
UserID, ListID
34, 345
12, 23
12, 534
12, 34
1, 13
1, 42
Мои мысли заключались в том, чтобы сделать вторую строку списка, разделенного на «запятые», но оттуда я застрял. Какие-либо предложения?
3 ответа
Вы должны очистить ваши данные, прежде чем вводить их в конструктор фрейма данных. Вот простой скрипт:
import pandas as pd
data = [['34', '345'],
['12', '23,534,34'],
['1', '13,42']]
new_data = []
for row in data:
x, yvals = row
for y in yvals.split(','):
new_data.append([x,y])
df = pd.DataFrame(new_data, columns=['UserID', 'ListID'])
Вы можете сделать следующее:
df_tmp = pd.DataFrame([['34', '345'],
['12', '23,534,34'],
['1', '13,42']], columns=['ListID', 'UserIDs'])
s = df_tmp['UserIDs'].str.split(',', expand=True).stack()
i = s.index.get_level_values(0)
df = df_tmp.loc[i].copy()
df["UserID"] = s.values
del df['UserIDs']
Вот один способ
In [386]: L = [['34', '345'], ['12', '23,534,34'], ['1', '13,42']]
In [387]: (pd.DataFrame(L, columns=['UserID', 'ListID'])
.set_index('UserID')
.ListID.str.split(',')
.apply(pd.Series)
.stack()
.reset_index(level=0, name='ListID'))
Out[387]:
UserID ListID
0 34 345
1 12 23
2 12 534
3 12 34
4 1 13
5 1 42
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.