pandas:按1列分组,对另一列求和,并除去重复的行

2024-09-29 08:26:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我敢肯定这个问题以前有人问过,也有人回答过,但我的问题可能用词不对。你知道吗

我有以下数据帧:

  article day views
0  729910  13   162
1  729910  14   283
2  730855  13     1
3  731449  13     2

我希望在文章中每个值有一行,并且有一个views/total_views列,该列对行中每个文章出现的views数字求和。你知道吗

所以输出应该是这样的(day在这里对我来说无关紧要):

  article  views
0  729910  445 (162 + 283)
1  730855  1
2  731449  2

最接近的是:

parsed_report_df.groupby(['article', 'day'])['views'].sum()

由此产生:

article  day
729910   13     162
         14     283
730855   13       1
731449   13       2
735682   12       1

但我只需要相同的views每个不同的day每个article。你知道吗


Tags: 数据reportdfarticle文章数字parsedviews
2条回答

您需要先将列转换为浮点或整数,然后通过^{}聚合sum,再通过^{}

groupby中使用Series-的解决方案也用于Series-article列:

 df = (parsed_report_df['views'].astype(float)
                                .groupby(parsed_report_df['article']).sum()
                                .reset_index())
print (df)
  article  views
0  729910  445.0
1  730855    1.0
2  731449    2.0

另一个具有views列赋值后转换值的解决方案:

parsed_report_df['views'] = parsed_report_df['views'].astype(float)
df = parsed_report_df.groupby('article', as_index=False)['views'].sum()
print (df)
  article  views
0  729910  445.0
1  730855    1.0
2  731449    2.0

删除额外的列、groupby、sum和reset\u index应该可以得到输出

>>> df=pd.DataFrame(data=[[729910, 13, 162],[729910, 14, 283],[730855,13,1],[731449, 13,2]], columns=['article','day', 'views'])

>>> df
   article  day  views
0   729910   13    162
1   729910   14    283
2   730855   13      1
3   731449   13      2

>>> df[['article','views']].groupby('article').sum().reset_index()

   article  views
0   729910    445
1   730855      1
2   731449      2

相关问题 更多 >