Python функция с функциональностью, аналогичной функции R split - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть фрейм данных с несколькими столбцами, и мне нужно разделить его на вектор групп, определенных параметром (columns et c)

R имеет функцию разделения, как показано ниже:

фрейм данных A

 >   date  c1 c2 c3  c4 

 >   2021   1  1  a  ss

 >   2022   1  1  b  sa

 >   2023   3  1  b  sd

data_splitting= split(A, by=c('C1', 'C2'), keep.by=FALSE)

результат в R vector :

Vector

  >  1.1 

  >  2021 a ss

  >  2022 b sa

  >  3.1

  >  2023 b sd

Мне нужна аналогичная функциональность в python

Спасибо, Костас

1 Ответ

0 голосов
/ 17 апреля 2020

Этого можно достичь от Pandas до groupby в pandas.

import pandas as pd

test_a = pd.DataFrame(dict(
  date=(2021, 2022, 2023),
  c1=(1,1,3),
  c2=(1,1,1),
  c3=("a", "b", "b"),
  c4 =("ss", "sa", "sd")
))


split_a = test_a.groupby(["c1", "c2"])

Теперь split_a будет итератором, который содержит кадры данных выше. Вы можете восстановить их, перебирая их, чтобы создать список фреймов данных:

for indx, split_data in split_a:
    print("Index:", indx)
    print(split_data)
    #  if you need the values, just use split_data.values

Поскольку вы применяете прогноз для каждой группы; это может быть сделано через заявку по группе. В качестве простого примера, давайте создадим функцию, которая возвращает количество строк в кадре данных:

def nrows(df):
    return df.shape[0]

Затем, запустив это с apply, запустит «функцию прогнозирования» для каждой группы:

def nrows(df):
    return df.shape[0]

nrows_by_group = test_a.groupby(["c1", "c2"]).apply(nrows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...