#python #pandas-groupby #slice #feature-extraction
#python #pandas-groupby #нарезать #функция-извлечение
Вопрос:
Я делаю проект ML. После предварительной обработки данных мне нужно выполнить извлечение объектов. В моем наборе данных у меня есть 25 классов (алфавиты в наборах данных), и для каждого класса есть 20 предметов (сколько раз я получал алфавит). С помощью функции groupby()
все они (25 * 20 = 500) имеют одинаковый размер (1000). Я хочу сжать 1000 точек выборки до 50 точек выборки путем вычисления maccs
среднего значения столбца.
Мой набор данных выглядит следующим образом:
Это то, что я пробовал, но это не сработало. Это выдает ошибку ‘SeriesGroupBy’ объект не имеет атрибута ‘iloc’.
for i in np.arange(211, 890, 20):
new_dataset = new_dataset.groupby(['alphabet', 'subject'])['maccs'].iloc[i-10:i 20,6].mean(axis=0)
Как я могу получить доступ к строке и столбцам при использовании groupby()
функции? Или что я могу использовать, чтобы сделать что-то подобное?
Ответ №1:
import pandas as pd
alpha_df = pd.read_csv(##path to .csv file)
alpha_gb = alpha_df.groupby(['alphabet','subject'])
alpha_agg = alpha_gb.agg({
'mccs' : 'mean'
})
agg_alpha_df = alpha_agg.reset_index()
Здесь я предполагаю, что вы хотите сначала классифицировать по alphabet
, а затем классифицировать по subject
столбцу. потому что порядок имен столбцов в таблице groupby()
имеет значение.
Кстати, это можно сделать в одной строке
grouped_df = alpha_df.groupby(['alphabet','subject'])['mccs'].reset_index(inplace=True)
Но первый более явный и настраиваемый.
вы можете посмотреть здесь дополнительные агрегированные операции.
Комментарии:
1. Спасибо за ваш ответ, но я хочу сделать что-то другое. Как вы сказали, я объединил столбцы алфавита и темы. Затем я произвожу повторную выборку каждого из них, чтобы получить 1000 точек выборки. Теперь я пытаюсь изменить размер столбца maccs , чтобы изменить размер 1000 точек выборки на 50, но сначала мне нужно вычислить, что 50 строк столбцов maccs означают не все 1000 строк. У меня возникли проблемы с тем, как нарезать данные с помощью groupby() .
2. Извините, но я все еще не понял, что вы пытаетесь сделать. Если вы хотите
groupby
использовать только первые 50 строк; затемalpha_df.loc[:50, :].groupby(['alphabet','subject'])
можно использовать3. Спасибо, это сработало, но не совсем то, что я хотел. Я хочу взять в среднем каждые 50 из 1000 точек выборки, как я могу это сделать?
for i in np.arange(211, 890, 20): new_ds = new_dataset.iloc[i-10:i 20].groupby(['alphabet', 'subject'])['maccs'].mean()
. Я пробовал это, но это дает только одну строку.