根据同一列中的连续重复值合并特定行

时间:2018-12-12 23:02:42

标签: python r dplyr

使用R或python,我有一个数据集,我想知道如何合并具有重复项的连续行。

示例

X .... Y

猫... Q


狗... U


猫... T


狗... P


猫* ...是


猫* ... K


狗... P

第X列有一些条目,我想连续两次将具有条目“ cat”的任何行合并(我用“ *”突出显示了它们),因此它们将与条目变成一行Y列中的为(Y,K)。

X ..... Y

猫... Q


狗... U


猫... T


狗... P


cat ... Y,K


狗... T

如果条件是连续的,则在一种情况下几乎将具有重复条目的任何行合并。

1 个答案:

答案 0 :(得分:1)

这里是base R的{​​{1}}方法。通过比较相邻元素“ X”的相等性来创建分组列,并使用aggregate中的元素将by和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

或使用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