#python #pandas
Вопрос:
Мой исходный кадр данных выглядит следующим образом:
Имя | ID |
---|---|
тест | 1 |
тест | 2 |
тест | 2 |
тест | 3 |
тест | 4 |
тест | 5 |
тест | 6 |
тест | 7 |
тест | 8 |
тест | 9 |
тест | 9 |
тест | 10 |
тест | 11 |
тест | 12 |
тест | 13 |
Теперь я хочу создать три подкадра (или список кадров данных), которые содержат строки со следующими идентификаторами:
df[0]: 1, 4, 7, 10, 13
df[1]: 2, 5, 8, 11
df[2]: 3, 6, 9, 12
Таким образом, на самом деле df[1] приводит к следующему:
Имя | ID |
---|---|
тест | 2 |
тест | 2 |
тест | 5 |
тест | 8 |
тест | 11 |
Я попробовал сделать это с помощью цикла и «добавить», но я читаю это довольно медленно, если у вас много строк. Я действительно не уверен, как сделать это приятным и эффективным способом с пандами.
Комментарии:
1. Вы хотите
list
получить фреймы данных в качестве выходных данных?2. Да, я хочу
list
, чтобы в качестве вывода был один из фреймов данных.
Ответ №1:
Учитывая шаблон, кажется, что вы хотите сгруппироваться на основе результата df.id % 3
. В этом случае, вот векторизованный подход, использующий DataFrame.groupby
groups = [g for k, g in df.groupby(df.id % 3, sort=False)]
Ввод
gt;gt;gt; df name id 0 test 1 1 test 2 2 test 2 3 test 3 4 test 4 5 test 5 6 test 6 7 test 7 8 test 8 9 test 9 10 test 9 11 test 10 12 test 11 13 test 12 14 test 13 name id 0 test 1 4 test 4 7 test 7 11 test 10 14 test 13
Выход
gt;gt;gt; groups[0] name id 0 test 1 4 test 4 7 test 7 11 test 10 14 test 13 gt;gt;gt; groups[1] name id 1 test 2 2 test 2 5 test 5 8 test 8 12 test 11 gt;gt;gt; groups[2] name id 3 test 3 6 test 6 9 test 9 10 test 9 13 test 12
Ответ №2:
df-это ваш исходный кадр данных:
dfs = [] a = [[1, 4, 7, 10, 13],[2, 5, 8, 11],[3, 6, 9, 12]] for i in a: dfs.append(df.loc[df['id'].isin(i)]) print(dfs[0]) print(dfs[1]) print(dfs[2])
выход:
name id 0 test 1 4 test 4 7 test 7 11 test 10 14 test 13 name id 1 test 2 2 test 2 5 test 5 8 test 8 12 test 11 name id 3 test 3 6 test 6 9 test 9 10 test 9 13 test 12