Как повысить эффективность обработки объекта Pandas groupby? - PullRequest
0 голосов
/ 11 июля 2020

"" "У меня есть фрейм данных из миллиона строк, которые я сделал .groupby().

  1. Я хотел бы получить строки, содержащие наибольшее значение n для каждой комбинации идентификатора и ткани .
  2. Кроме того, мне нужно сгенерировать еще один df, содержащий среднее значение для каждой комбинации идентификатора и ткани. Хотя я использую мощный сервер Linux, процесс выполняется более 24 часов. Поэтому , Я ищу более эффективную стратегию. Я трачу часы на stackoverflow, но не смог применить решения к моей конкретной проблеме. Заранее спасибо за помощь.

"" "

df = pd.DataFrame({'id': ['g1','g1','g1','g1','g2','g2','g2','g2','g2','g2'],\
                  'Trans':['g1.1','g1.2','g1.3','g1.4','g2.1','g2.2','g2.3','g2.2','g2.1','g2.1'],\
                  'Tissue': ['Lf','Lf','Lf','pc','Pol','Pol','Pol','Ant','Ant','m2'],\
                  'val': [0.0948,1.5749,1.8904,0.8673,2.1089,2.5058,4.5722,0.7626,3.1381,2.723]})
print('df')

df_highest = pd.DataFrame(columns=df.columns)#brand new df that will contain the rows of interest
for grpID,data in df.groupby(['id','Tissue']):
    highest = data.nlargest(1,'val')
    df_highest.append(highest)

df_highest.to_csv('out.txt',sep='\t',index=False)

1 Ответ

0 голосов
/ 11 июля 2020

Если вы пытаетесь получить наибольшее значение для каждой комбинации идентификатора и ткани, попробуйте этот код.

df_highest = df.loc[df.groupby(['id','Tissue'])['val'].idxmax()]

Это даст вам среднее значение комбинации идентификатора и ткани.

df_mean = df.groupby(['id','Tissue']).agg({'val':np.mean})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...