Объединение определенных строк на основе последовательных повторяющихся значений в одном столбце - PullRequest
0 голосов
/ 13 декабря 2018

Используя R или python, у меня есть набор данных. Я хотел бы знать, как я могу объединить последовательные строки с последовательными дублирующимися записями.

Пример

X .... Y

кошка ... Q


собака ... U


кошка ... T


собака ...P


cat * ... Y


cat * ... K


dog ... P

В столбце X есть несколько записей, я хотел бы объединить все строки, в которых есть запись "cat" два раза подряд (я выделил их "*"), чтобы они стали одной строкой с записями в столбце.Y будет (Y, K).

X ..... Y

cat ... Q


dog ... U


кошка ... T


собака ... P


кошка ... Y, K


собака ... T

в значительной степени объединяет любые строки с дублирующимися записями при одном условии, если они являются последовательными.

1 Ответ

0 голосов
/ 13 декабря 2018

Вот метод base R с aggregate.Создайте столбец группировки, сравнив равенство соседних элементов равным 'X', используйте его в aggregate для группировки и paste элементов вместе.

aggregate(Y ~ X + grp, transform(dat, 
    grp = cumsum(c(TRUE, X[-1] != X[-length(X)]))), 
           FUN = paste, collapse= ",")[c('X', 'Y')]
#    X   Y
#1 cat   Q
#2 dog   U
#3 cat   T
#4 dog   P
#5 cat Y,K
#6 dog   P

data

dat <- structure(list(X = c("cat", "dog", "cat", "dog", "cat", "cat", 
 "dog"), Y = c("Q", "U", "T", "P", "Y", "K", "P")), 
  class = "data.frame", row.names = c(NA, -7L))

Или используя python

dat['grp'] = (dat.X != dat.X.shift()).cumsum()
out = dat.groupby(['grp', 'X'])['Y'].apply(lambda x: \
           ",".join(x)).reset_index()[['X', 'Y']]
print(out)
#     X    Y
#0  cat    Q
#1  dog    U
#2  cat    T
#3  dog    P
#4  cat  Y,K
#5  dog    P

data

import pandas as pd
import numpy as np
dat = pd.DataFrame({'X': ["cat", "dog", "cat", "dog", "cat", "cat", 
        "dog"], "Y": ["Q", "U", "T", "P", "Y", "K", "P"]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...