在Pandas中,获取groupby的大小并将值存储在每行的新列中



我写了一个可以工作的代码,但是我很确定我可以使用一些pandas函数使它更好。如果你能给我一些建议,我会很感激的。

作为上下文,我已经抓取了一些社交媒体帖子,我得到了每天的帖子数量,对其应用(x-1)*1并将此数字存储在"density_score"列中(我对不同的搜索关键字进行了操作)。

我找到了有关如何使用不同骨料而不是大小()的相关答案。

DF看起来像这样:

- keyword   --- date  
0    서예지 2021-07-25  
1    서예지 2021-07-25  
2    서예지 2021-07-25  
3    서예지 2021-07-25  
4    서예지 2021-07-22  
...    ...     ...  
8808    박초롱 2018-02-05  
8809    박초롱 2018-02-03  
8810    박초롱 2018-01-28  
8811    박초롱 2018-01-15  
8812    박초롱 2018-01-03  

我写了这段代码,它给了我想要的结果:

df_score['density_score'] = 0 # create column
grouped = df_score['density_score'].groupby([df_score['keyword'], df_score['date']]).size()
join = pd.merge(df_score, grouped, on=['keyword','date'], how='left')
join['density_score_x'] = join['density_score_y'].transform(lambda x: (x-1)*10)
df_score['density_score'] = join['density_score_x']

我该如何改进它?当pandas函数存在时,我不认为有一个join是理想的。

好吧,如果您不想步进连接,而是直接通过['keyword', 'date']列进行观察,请参阅下面代码中的第二行…

df_score['density_score'] = 0 # create column
df_score['density_score']=df_score.groupby(['keyword', 'date']).cumcount(ascending=False).groupby([df_score['keyword'], df_score['date']]).cummax()+1 #is this what you mean?
print(df_score)
df_score['density_score']=df_score['density_score'].transform(lambda x: (x-1)*10)
print(df_score)
#  keyword       date  density_score
#0     서예지 2021-07-25             30
#1     서예지 2021-07-25             30
#2     서예지 2021-07-25             30
#3     서예지 2021-07-25             30
#4     서예지 2021-07-22              0
#5     박초롱 2018-02-05              0
#6     박초롱 2018-02-03              0
#7     박초롱 2018-01-28              0
#8     박초롱 2018-01-15              0
#9     박초롱 2018-01-03              0

相关内容

  • 没有找到相关文章

最新更新