pandas groupby агрегат для столбцов, имеющих списки элементов, возвращает строку, а не список - PullRequest
0 голосов
/ 24 сентября 2019

Рассмотрим следующий фрейм данных:

sample_DF.tsv

Я хочу сгруппировать этот фрейм данных, поэтому я применил следующую логику:

df = pd.read_csv('sample_DF.tsv',sep='\t')

df.groupby('col3',as_index=False).aggregate(lambda x:list(x)).reset_index(drop=True)

Но выходные данные не объединяются в списки как список списков для столбцов 4 и 5.

Когда я пытался сделать то же самое с фиктивным кадром данных, например:

df = pd.DataFrame({'P':[['a','b','c'],['x','y'],[1,2,3],['a','b','c'],['x','y']],'Q':['tom','dick','harry','tom','dick'],'R':[10,12,15,10,12]})

df.groupby('R',as_index=False).aggregate(lambda x:list(x))

Я получаю желаемый результат, когда списки списков возвращаются для столбцов P и Q.

Это означает, что в данных sample_DF.tsv есть что-то своеобразное, что приводит к особому поведению моегокоманда pandas.groupby.

Пожалуйста, дайте мне знать, в чем может быть причина.

1 Ответ

1 голос
/ 24 сентября 2019

Поскольку для чтения списков из файла, сохраненного как строки, необходимо преобразовать их в списки объектов python с помощью ast.literal_eval с оператором if-else:

import ast

df = pd.read_csv('sample_DF.tsv', sep="\t", index_col=None, parse_dates=False)

cols = ['TFactor','miRNA']
df[cols] = df[cols].applymap(lambda x: ast.literal_eval(x) if str(x).startswith('[') else [x])
print (df)

    Gene stable ID   Genes  Chromo community                TFactor  \
0  ENSG00000148584    A1CF      10      com2                  [INV]   
1  ENSG00000175899     A2M      12      com1  [STAT3, TFCP2, NFKB1]   
2  ENSG00000166535   A2ML1      12      com9                  [INV]   
3  ENSG00000128274  A4GALT      22      com4                  [INV]   
4  ENSG00000081760    AACS      12      com3                  [INV]   

                                               miRNA  
0  [miR-374-5p/655-3p, miR-758, miR-374c-5p, miR-...  
1                                              [INV]  
2                                              [INV]  
3                                              [INV]  
4                              [miR-137-3p, miR-137]  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...