在 pandas 中获取每组分布的 df
Getting df with distribution per group in pandas
我有一个包含 Reddit 数据的数据框,包括作者和 subreddit 字段。
每个作者,我想得到每个 subreddit 中 he/she 帖子的频率分布,可以与其他作者的分布进行比较。
sub_visits = df.groupby('author').subreddit.value_counts()/df.groupby('author').subreddit.count()
该行为我提供了一个多索引 pandas 数据框,作者是第一个索引。然后是作者在其中活跃的所有 subreddit 作为第二个索引,最后作为值是他们在该 subreddit 中的帖子的比例。
很好,但我希望最终为每个作者分配相同的长度。
为此,我将整个 df 中的所有子目录(而不仅仅是作者访问过的子目录)包含在一个数据框中,作者作为行。然后我用零填充它,然后用 sub_visits.
中的值填充
这个 for 循环在技术上适用于此。
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]
然而,它很慢,因为只是填写值。我想知道是否有更好的方法来做到这一点?创建分布,或填写值。
非常感谢
经过一番努力后,我偶然发现了答案。它实际上相当简单,但我发现它并不容易找到,所以我希望这个问题可以帮助其他人解决同样的问题。 pandas 组内的这种分布(这里 'author' 内的 'subreddit' 矩阵可以通过以下方式快速获得:
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)
我有一个包含 Reddit 数据的数据框,包括作者和 subreddit 字段。 每个作者,我想得到每个 subreddit 中 he/she 帖子的频率分布,可以与其他作者的分布进行比较。
sub_visits = df.groupby('author').subreddit.value_counts()/df.groupby('author').subreddit.count()
该行为我提供了一个多索引 pandas 数据框,作者是第一个索引。然后是作者在其中活跃的所有 subreddit 作为第二个索引,最后作为值是他们在该 subreddit 中的帖子的比例。
很好,但我希望最终为每个作者分配相同的长度。
为此,我将整个 df 中的所有子目录(而不仅仅是作者访问过的子目录)包含在一个数据框中,作者作为行。然后我用零填充它,然后用 sub_visits.
中的值填充这个 for 循环在技术上适用于此。
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]
然而,它很慢,因为只是填写值。我想知道是否有更好的方法来做到这一点?创建分布,或填写值。
非常感谢
经过一番努力后,我偶然发现了答案。它实际上相当简单,但我发现它并不容易找到,所以我希望这个问题可以帮助其他人解决同样的问题。 pandas 组内的这种分布(这里 'author' 内的 'subreddit' 矩阵可以通过以下方式快速获得:
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)