Часть имени столбца pandas groupby?

Как сгруппировать фрейм данных по частям имени столбца, а затем построить пары с помощью одной команды?

import pandas as pd
import numpy as np

dataframe = pd.DataFrame(np.random.randn(5,5),columns=['2678_namex', '2354_namey', '2396_namex', '2398_namez', '2368_namey'] )

Это должны быть следующие группы:

[2678_namex , 2396_namex]  
[2354_namey , 2368_namey]

С уважением

Как выглядит ваш ожидаемый результат?

Vikas P 26.10.2018 09:06

Приходилось пробовать что-нибудь самому? Какую ошибку вы получаете?

Ahmad Khan 26.10.2018 09:09

Что вы ожидаете? может вам нужен минус этот столбец, тогда вам нужен dataframe['2678_namex-2354_namey'] = dataframe['2678_namex'] - dataframe['2354_namey'] или вы ожидали сгруппировать эти столбцы dataframe.groupby(['2678_namex','2354_namey']).mean()?

Rudolf Morkovskyi 26.10.2018 09:16

Я не так долго работал с функцией groupby, поэтому не уверен, можно ли применить ее здесь. Подходящего примера в хелпе панды не нашел, поэтому прошу здесь. Я подумал, что можно разделить транспонированный фрейм данных с помощью groupby на парные наборы данных по именам, а затем отобразить их на отдельных фигурах. Может быть, кто-то знает, как это сделать в простом / быстром oneliner.

incognito 26.10.2018 09:35

@RudolfMorkovskyi, с вашими примерами я не дохожу до группировки, как описано выше.

incognito 26.10.2018 09:42
2
5
724
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы ищете что-то подобное?

df.columns = list(map(lambda x:x.split('_')[1],df.columns))<br>
df.T.groupby(by=df.columns).sum()

если вы хотите, чтобы числовая часть также была в имени группы, тогда возникнет двусмысленность, например, какое имя группы будет использоваться для группы namez, которая группирует 2398_namez и 2789_namez

Jasdeep Rana 26.10.2018 10:34

Спасибо, это уже решение. Я неверно истолковал вывод group.first. df = pd.DataFrame(np.random.randn(6,6),columns=['2678_namex', '2354_namey', '2396_namex', '2398_namez', '2368_namey','2789_namez']) df.columns = list(map(lambda x:x.split('_')[1],df.columns)) groups = df.T.groupby(by=df.columns) for pairname, df in groups: df = df.T df.plot()

incognito 26.10.2018 10:44

Другие вопросы по теме