Как сгруппировать фрейм данных по частям имени столбца, а затем построить пары с помощью одной команды?
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]
С уважением
Приходилось пробовать что-нибудь самому? Какую ошибку вы получаете?
Что вы ожидаете? может вам нужен минус этот столбец, тогда вам нужен dataframe['2678_namex-2354_namey'] = dataframe['2678_namex'] - dataframe['2354_namey']
или вы ожидали сгруппировать эти столбцы dataframe.groupby(['2678_namex','2354_namey']).mean()
?
Я не так долго работал с функцией groupby, поэтому не уверен, можно ли применить ее здесь. Подходящего примера в хелпе панды не нашел, поэтому прошу здесь. Я подумал, что можно разделить транспонированный фрейм данных с помощью groupby на парные наборы данных по именам, а затем отобразить их на отдельных фигурах. Может быть, кто-то знает, как это сделать в простом / быстром oneliner.
@RudolfMorkovskyi, с вашими примерами я не дохожу до группировки, как описано выше.
Вы ищете что-то подобное?
df.columns = list(map(lambda x:x.split('_')[1],df.columns))<br>
df.T.groupby(by=df.columns).sum()
если вы хотите, чтобы числовая часть также была в имени группы, тогда возникнет двусмысленность, например, какое имя группы будет использоваться для группы namez, которая группирует 2398_namez и 2789_namez
Спасибо, это уже решение. Я неверно истолковал вывод 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()
Как выглядит ваш ожидаемый результат?