Как разделить DataFrame при изменении значения строки в столбце c? - PullRequest
0 голосов
/ 08 января 2020

Ниже приведен пример DataFrame.

      0      1     2     3          4
0   0.0  13.00  4.50  30.0   0.0,13.0
1   0.0  13.00  4.75  30.0   0.0,13.0
2   0.0  13.00  5.00  30.0   0.0,13.0
3   0.0  13.00  5.25  30.0   0.0,13.0
4   0.0  13.00  5.50  30.0   0.0,13.0
5   0.0  13.00  5.75   0.0   0.0,13.0
6   0.0  13.00  6.00  30.0   0.0,13.0
7   1.0  13.25  0.00  30.0  0.0,13.25
8   1.0  13.25  0.25   0.0  0.0,13.25
9   1.0  13.25  0.50  30.0  0.0,13.25
10  1.0  13.25  0.75  30.0  0.0,13.25
11  2.0  13.25  1.00  30.0  0.0,13.25
12  2.0  13.25  1.25  30.0  0.0,13.25
13  2.0  13.25  1.50  30.0  0.0,13.25
14  2.0  13.25  1.75  30.0  0.0,13.25
15  2.0  13.25  2.00  30.0  0.0,13.25
16  2.0  13.25  2.25  30.0  0.0,13.25

Я хочу разделить это на новые кадры данных при изменении строки в столбце 0.

      0      1     2     3          4
0   0.0  13.00  4.50  30.0   0.0,13.0
1   0.0  13.00  4.75  30.0   0.0,13.0
2   0.0  13.00  5.00  30.0   0.0,13.0
3   0.0  13.00  5.25  30.0   0.0,13.0
4   0.0  13.00  5.50  30.0   0.0,13.0
5   0.0  13.00  5.75   0.0   0.0,13.0
6   0.0  13.00  6.00  30.0   0.0,13.0

7   1.0  13.25  0.00  30.0  0.0,13.25
8   1.0  13.25  0.25   0.0  0.0,13.25
9   1.0  13.25  0.50  30.0  0.0,13.25
10  1.0  13.25  0.75  30.0  0.0,13.25

11  2.0  13.25  1.00  30.0  0.0,13.25
12  2.0  13.25  1.25  30.0  0.0,13.25
13  2.0  13.25  1.50  30.0  0.0,13.25
14  2.0  13.25  1.75  30.0  0.0,13.25
15  2.0  13.25  2.00  30.0  0.0,13.25
16  2.0  13.25  2.25  30.0  0.0,13.25

Я безуспешно пытался адаптировать следующие решения. Разбить массив на значение в numpy Разбить большой pandas фрейм данных

Ответы [ 3 ]

7 голосов
/ 08 января 2020

Похоже, вы хотите groupby первый столбец. Вы можете создать словарь из объекта groupby, и ключи groupby должны быть ключами словаря:

d = dict(tuple(df.groupby('0')))

print(d[0])

    0     1     2     3         4
0  0.0  13.0  4.50  30.0  0.0,13.0
1  0.0  13.0  4.75  30.0  0.0,13.0
2  0.0  13.0  5.00  30.0  0.0,13.0
3  0.0  13.0  5.25  30.0  0.0,13.0
4  0.0  13.0  5.50  30.0  0.0,13.0
5  0.0  13.0  5.75   0.0  0.0,13.0
6  0.0  13.0  6.00  30.0  0.0,13.0

Для списка просто вызовите метод values как list(d.values())

4 голосов
/ 08 января 2020

На основе

Я хочу разделить это на новые кадры данных, когда строка в столбце 0 изменится.

Если вы хотите группировать только значение в столбце 0 Изменения можно попробовать:

d=dict([*df.groupby(df['0'].ne(df['0'].shift()).cumsum())])

print(d[1])
print(d[2])

     0     1     2     3         4
0  0.0  13.0  4.50  30.0  0.0,13.0
1  0.0  13.0  4.75  30.0  0.0,13.0
2  0.0  13.0  5.00  30.0  0.0,13.0
3  0.0  13.0  5.25  30.0  0.0,13.0
4  0.0  13.0  5.50  30.0  0.0,13.0
5  0.0  13.0  5.75   0.0  0.0,13.0
6  0.0  13.0  6.00  30.0  0.0,13.0
      0      1     2     3          4
7   1.0  13.25  0.00  30.0  0.0,13.25
8   1.0  13.25  0.25   0.0  0.0,13.25
9   1.0  13.25  0.50  30.0  0.0,13.25
10  1.0  13.25  0.75  30.0  0.0,13.25
1 голос
/ 08 января 2020

Я буду использовать GroupBy.__iter__:

d = dict(df.groupby(df['0'].diff().ne(0).cumsum()).__iter__())
#d = dict(df.groupby(df[0].diff().ne(0).cumsum()).__iter__())

Обратите внимание, что при наличии повторяющихся непоследовательных значений будут созданы разные группы, если вы используете только groupby(0) они будут сгруппированы в одну группу

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