Получение df с распределением на группу в pandas - PullRequest
0 голосов
/ 14 июля 2020

У меня есть фрейм данных с данными Reddit, включая автора и поле subreddit. Я хотел бы получить для каждого автора распределение того, как часто он / она публикует сообщения в каждом субреддите, которое можно сравнить с распределением других авторов.

sub_visits = df.groupby('author').subreddit.value_counts()/df.groupby('author').subreddit.count()

Эта строка дает мне мультииндексированный pandas фрейм данных с автором в качестве первого индекса. Затем все сабреддиты, в которых автор был активен в качестве второго индекса и, наконец, в качестве значений доли их сообщений, которые были в этом сабреддите.

Это хорошо, но я хотел бы получить распределения одинаковой длины для каждого author.

Для этого я включил все сабреддиты из всей df (а не только те, которые посетил автор), в фрейм данных с авторами в виде строк. Затем я заполняю это нулями, а затем значениями из sub_visits.

Это для l oop технически работает для этого.

pdf = pd.DataFrame(index = df.author.unique(),columns = all_subs)
pdf = pdf.fillna(0)

for idx, df_select in sub_visits.groupby(level=[0, 1]):
            pdf.loc[idx[0],idx[1]] = df_select[0]

Однако это довольно медленно, просто для заполнения в значениях. Интересно, есть ли способ лучше? Либо создание раздачи, либо заполнение значений.

Большое спасибо

1 Ответ

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

Немного потревожившись, я наткнулся на ответ. На самом деле это довольно просто, но мне было нелегко найти, поэтому я надеюсь, что этот вопрос может помочь другим с той же проблемой. Такое распределение (здесь по «subreddit» внутри «author») матрица внутри группы в pandas можно быстро получить с помощью:

sub_visits = df.groupby('author').subreddit.value_counts()/df.groupby('author').subreddit.count()
sub_visits = sub_visits.unstack(-1)
sub_visits = sub_visits.fillna(0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...