Группировка и объединение строк - PullRequest
0 голосов
/ 13 декабря 2018

Чтобы упростить мою проблему, я создал небольшой DataFrame, который выглядит следующим образом:

Type  From  To
A    "H1"  "U1"
A    "H9"  "I8"
A    "H1"  "IL"
B    "P2"  "P8"
B    "P2"  "P7"
C    "P9"  "O8"
C    "P9"  "I0"
C    "P7"  "O8"

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

Type  From  To 
A    "H1"  "U1, IL"
A    "H9"  "I8"
B    "P2"  "P8, P7"
C    "P9"  "O8, I0"
C    "P7"  "O8"

Я сделал это в R, используя функции split и aggregate.Буду очень признателен за любую идею или предложение о том, как можно получить в Python!

Ответы [ 3 ]

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

Использование панд -

df.groupby('From', as_index=False).agg({'To':', '.join, 'Type':'first'} )
0 голосов
/ 13 декабря 2018

Назовите это взломать.

df['To']= df['To'].apply(lambda x: x +',')
df = df.groupby(['Type','From'])['To'].sum().reset_index()
df['To'] = df['To'].apply(lambda x:x.rstrip(','))
0 голосов
/ 13 декабря 2018

В R мы можем сделать группу по paste.(Обратите внимание, что в вопросе был тег R, когда он был опубликован первым. В противном случае мы бы даже не попытались использовать это решение R)

library(tidyverse)
df1 %>%
    group_by(Type, From) %>%
    summarise(To = toString(To))
# A tibble: 5 x 3
# Groups:   Type [?]
#  Type  From  To    
#  <chr> <chr> <chr> 
#1 A     H1    U1, IL
#2 A     H9    I8    
#3 B     P2    P8, P7
#4 C     P7    O8    
#5 C     P9    O8, I0

data

df1 <- structure(list(Type = c("A", "A", "A", "B", "B", "C", "C", "C"
), From = c("H1", "H9", "H1", "P2", "P2", "P9", "P9", "P7"), 
To = c("U1", "I8", "IL", "P8", "P7", "O8", "I0", "O8")),
 class = "data.frame", row.names = c(NA, 
 -8L))

В python мы можем сделать

out = df2.groupby(['Type', 'From'])['To'].apply(lambda x: ','.join(x)).reset_index()
print(out)
# Type From     To
#0    A   H1  U1,IL
#1    A   H9     I8
#2    B   P2  P8,P7
#3    C   P7     O8
#4    C   P9  O8,I0

data

import pandas as pd
df2 = pd.DataFrame({'Type': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'], \
                'From': ['H1', 'H9', 'H1', 'P2', 'P2', 'P9', 'P9', 'P7'], \
                'To': ['U1', 'I8', 'IL', 'P8', 'P7', 'O8', 'I0', 'O8']})
...