我有一个包含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]
但是,仅填充值非常慢。我想知道是否有更好的方法可以做到这一点?创建分布或填写值。
非常感谢
答案 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)