Я хотел бы создавать списки, например, в df2
, из данных, таких как в df1
. Большая часть помощи, которую я читаю в Интернете, посвящена противоположному вопросу: как анализировать списки. В конце концов, мне бы хотелось, чтобы этот список был доступен как новая колонка в оригинале df1
.
import pandas as pd
df1 = pd.DataFrame(list(zip([1,2,3], [4,5,6], [7,8,9])),
columns=['numbers', 'numbers2', 'numbers3'])
df2 = pd.DataFrame(list(zip([[1,4,7], [2,5,8], [3,6,9]])),
columns=['list_of_numbers'])
Спасибо, что заглянули. Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы, если мой пример не ясен.
Вы можете использовать df.apply на axis=1
и назначить новый столбец с помощью df.assign:
df2 = df1.assign(list_of_numbers=df1.apply(list, axis=1))
df2
numbers numbers2 numbers3 list_of_numbers
0 1 4 7 [1, 4, 7]
1 2 5 8 [2, 5, 8]
2 3 6 9 [3, 6, 9]
Или добавьте к существующим df1
:
df1['list_of_numbers'] = df1.apply(list, axis=1)
Конвертируйте в_numpy , затем в список:
df1['list_of_numbers'] = df1.to_numpy().tolist()
Или для нового DataFrame:
out = df1.assign(list_of_numbers=df1.to_numpy().tolist())
Выход:
numbers numbers2 numbers3 list_of_numbers
0 1 4 7 [1, 4, 7]
1 2 5 8 [2, 5, 8]
2 3 6 9 [3, 6, 9]
На 300 тыс. строк и 3 столбца
# df1.assign(list_of_numbers=df1.to_numpy().tolist())
44 ms ± 2.02 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
# df1.assign(list_of_numbers=df1.apply(list, axis=1))
1.28 s ± 15.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)