我写了一个可以工作的代码,但是我很确定我可以使用一些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