дедупликация столбца индекса данных и столбцов слияния - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть следующее:

 t    len   id  accession
 t1   150   A   X1
 t1   150   B   X2
 t1   150   C   X3
 t2   200   E   X4
 t2   200   F   X5
 t2   200   G   X6

Я хочу следующее:

 t    len   id      accession
 t1   150   A,B,C   X1,X2,X3 
 t2   200   E,F,G   X4, X5,X6

Есть ли способ повернуть фрейм данных, как описано pandas.DataFrame.pivot, но в то же время объединить записи столбцов в один столбец?

Ответы [ 2 ]

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

groupby + agg

По умолчанию, когда вы задаете функцию в качестве аргумента для agg, она применяется к все серии , которые не используют для группировки.Таким образом, вы можете просто использовать:

res = data.groupby(['t', 'len']).agg(','.join).reset_index()

Если ваш фрейм данных содержит дополнительные серии, которые вы хотите игнорировать, вы можете указать серии, которые вы хотите агрегировать явно:

res = data.groupby(['t', 'len'])['id', 'accession'].agg(','.join).reset_index()
0 голосов
/ 18 декабря 2018

Мое предлагаемое решение объединяет groupby и agg.Начнем с данных:

import pandas as pd

data = pd.DataFrame({
    "t": ["t1", "t1", "t1", "t2", "t2", "t2"],
    "len": [150, 150, 150, 200, 200, 200],
    "id": ["A", "B", "C", "E", "F", "G"],
    "accession": ["X1", "X2", "X3", "X4", "X5", "X6"]})

Решение

data.groupby(["t", "len"]).agg({"id": lambda x: ",".join(x), 
                                "accession": lambda x: ",".join(x)}).reset_index()

Выход

    t  len     id accession
0  t1  150  A,B,C  X1,X2,X3
1  t2  200  E,F,G  X4,X5,X6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...