GroupBy блока данных при сравнении с набором элементов - PullRequest
0 голосов
/ 24 мая 2018

Итак, у меня есть датафрейм фильмов с 10K строк.Имейте столбец, который захватывает его жанр в строке через запятую.Так как фильм можно классифицировать по нескольким жанрам, мне нужно было создать набор жанров, который содержал бы все возможные жанры в строках 10K.Итак, я пошел по этому пути, выполнив следующее:

simplist = []
for i in df.genres.values:
    vlist = i.split(', ')
    for item in vlist:
        simplist.append(item)
gset = set(simplist)

Это дает мне список из 24 жанров из 27 тыс. Пунктов в простом списке, и это здорово.Но вот щепотка:

  1. Я хочу сгруппировать жанры, сравнивая жанры с набором, а затем выполнить агрегацию и другие операции И

  2. Я хочувыходные данные должны быть 24 различными группами, так что если фильм имеет более одного из жанров в наборе - он должен отображаться в обеих группах (устраняет смещение сортировки или пометки на этапе сбора данных)

Является ли groupby правильным выбором?

Спасибо за ваш вклад / мысли / варианты / подход заранее.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Понял !!Хотел поблагодарить кучу офлайновых людей и Pythonistas, которые помогли мне в правильном направлении.Оказывается, я крутил свои колеса с сетами и списками, когда одна единственная команда Панд (ну, если быть точным, 3) добилась цели !!

df2 = pd.DataFrame(df.genres.str.split(', ').tolist(), index=[df.col1, df.col2, df.coln]).stack() df2 = df2.reset_index()[[0, 'col1', 'col2', 'coln',]] df2.columns = ['Genre', 'col1', "col2", 'coln']

Это должно создать 2-й кадр данных (df2), который имеет ключевые столбцы для анализа из исходного кадра данных и строки, дублированные / приписанные каждому жанру.Вы видите истинное значение этого, когда вы делаете оборот и делаете что-то вроде:

revenue_table = df2.pivot_table(index=['Release Year','Genre'], values=['Profit'],aggfunc={'Profit': np.sum},fill_value=0,dropna=True) или что-то похожее с эффектом или вариантом использования.

Закрытие этого, но был бы признателен за любые заметки о более эффективных способахсделать это.

0 голосов
/ 25 мая 2018

Хорошо, поэтому я добился некоторого прогресса, но все еще не смог собрать кусочки головоломки.

Начал с составления списка и установки (не знаю, что я в итоге буду использовать) уникальныхзначения:

simplist = []

for i in df.genres.values: vlist = i.split(', ') for item in vlist: simplist.append(item)

gset = set(simplist) g_list = list(gset)

Затем отдельно используйте df.pivot для структурирования анализа:

table7 = df.pivot_table(index=['release_year'], values=['runtime'],aggfunc={'runtime': [np.median, ], 'popularity': [np.mean]}, fill_value=0, dropna=True)

Но вот в чем дело:

было бы замечательно, если бы я мог индексировать по g_list или проверить 'genres' против gset из 24 различных предметов, ноdf.pivot_table не поддерживает это.Оставляя его в жанрах, вы получаете ~ 2000 строк, и это не имеет смысла.

...