sum将 Dataframe 列值按另一列分组,然后使用sum更新行并删除重复项

p5fdfcr1  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(294)

我试图在一个Pandasdf中为下面示例中的每个演员总结两列(在下面的示例季节和评级中)。然后,我希望每个参与者存储总计,并删除包含该参与者的任何其他行。在下面的示例中,保留或删除的“名称”并不重要。
例如,这是输入df:

import pandas as pd

series = [('Stranger Things', 3, 5, 'Millie'),
          ('Game of Thrones', 8, 8, 'Emilia'), 
          ('La Casa De Papel', 4, 6, 'Sergio'),
          ('Westworld', 3, 7, 'Evan Rachel'), 
          ('Cops', 3, 10,  'Millie'),
          ('La Casa De Papel', 4, 7, 'Sergio')]

# Create a DataFrame object

df = pd.DataFrame(series, columns=['Name', 'Seasons', 'Rating', 'Actor'])

所需的输出是(同样,保留或丢弃的“名称”示例中的哪一个并不重要,但当存在多个示例时,应保留其中一个):

'Stranger Things', 6, 15, 'Millie'
'Game of Thrones', 8, 8, 'Emilia' 
'La Casa De Papel', 8, 13, 'Sergio'
'Westworld', 3, 7, 'Evan Rachel'

我已经研究了几种不同的方法,但如果不考虑解决挑战的最有效方法,就无法使任何方法发挥作用。这里的数据集大约是1.5k到3k行,我使用的是Python3.x。

t5fffqht

t5fffqht1#

按“参与者”分组,对“季节”和“评级”列使用总和聚合,对“名称”使用返回单个值的聚合(在本例中,我使用max),然后重置索引以将“参与者”列作为独立列重新排序,并按指定顺序对列重新排序:

df.groupby('Actor').agg({'Seasons':'sum','Rating':'sum','Name':'max'}).reset_index()[['Name','Seasons','Rating','Actor']]

产出:

Name                Seasons Rating  Actor
0   Game of Thrones     8       8       Emilia
1   Westworld           3       7       Evan Rachel
2   Stranger Things     6       15      Millie
3   La Casa De Papel    8       13      Sergio

相关问题