Как нарезать кадр данных Pandas на основе уникальных значений столбца внутри цикла for и передать каждый фрагмент функции? - PullRequest
0 голосов
/ 10 июля 2019

Предположим, я хочу иметь for loop, который на каждой итерации будет нарезать большой pandas dataframe df на основе уникальных значений одного из его столбцов, скажем, A, а затем передать этот нарезанный кадр данных в функция, которая принимает в качестве аргумента фрейм данных, скажем fun(df). В основном fun(df) будет получать новый фрагмент данных с каждой итерацией цикла for. Например, скажем, следующий мой фрейм данных:

A    B    C    D
1-1  an  at   23
1-2  ab  can  34
1-2  van bit  45
1-2  vd  sun  23
1-1  so  am   12
...

Теперь первая итерация цикла for передает следующий кадр данных в fun(df)

A    B    C    D
1-1  an  at   23
1-1  so  am   12

и следующая итерация передаст эту fun(df)

A    B    C    D
1-2  ab  can  34
1-2  van bit  45
1-2  vd  sun  23

и т. Д. И т. П.

Количество итераций цикла for должно быть равно количеству уникальных значений «A». Вот в этом случае это будет 2.

Как я могу сделать это в Python? Я новичок в этом и не знаю, как действовать дальше.

1 Ответ

2 голосов
/ 10 июля 2019

Используйте pandas.DataFrame.groupby, который возвращает повторяемый объект.

def fun(data):
    # pseudo function for a test
    print(data)

for k, d in df.groupby('A'):
    fun(d)

Выход:

     A   B   C   D
0  1-1  an  at  23
4  1-1  so  am  12

     A    B    C   D
1  1-2   ab  can  34
2  1-2  van  bit  45
3  1-2   vd  sun  23

Insight

pandas.DataFrame.groupby возвращает ((key, grouped-by dataframe), ...).

В строке for k, d in df.groupby('A'), k и d используются для распаковки возвращаемого итерируемого. Поскольку желаемый вывод не использует ключ (т. Е. 1-1, 1-2, ...), ответ таков.

fun в ответе представляет любую гипотетическую функцию. Как упоминалось в вопросе, fun - это функция, которая будет получать новый фрагмент данных с каждой итерацией цикла for. В этом случае это простая print функция для визуального представления что df.groupby возвращает.

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