在熊猫中按组分配获得df

时间:2020-07-14 15:02:01

标签: python pandas dataframe distribution

我有一个包含Reddit数据的数据框,其中包括作者和subreddit字段。 我想按作者分配他/她在每个子目录中发布的频率,并将其与其他作者的分布进行比较。

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

该行为我提供了一个多索引的熊猫数据框,其中作者为第一个索引。然后,所有作者处于活跃状态的子索引都将作为第二索引,并最终将其在该子索引中的分数作为值。

那很好,但是我想以每位作者等长的篇幅结尾。

为此,我将整个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]

但是,仅填充值非常慢。我想知道是否有更好的方法可以做到这一点?创建分布或填写值。

非常感谢

1 个答案:

答案 0 :(得分:0)

在挣扎了很多之后,我偶然发现了答案。它实际上很简单,但是我发现它不容易找到,所以我希望这个问题对其他有相同问题的人有所帮助。可以通过以下方式快速获得大熊猫在一个群体中的分布(在“作者”内的“ 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)

相关问题