gpt4 book ai didi

python - 向 pandas 数据帧添加额外的行以捕获剩余值(value),同时保留每个行的前 2 行

转载 作者:行者123 更新时间:2023-11-30 21:56:39 25 4
gpt4 key购买 nike

我有一个 pandas 数据框,如下所示:

df = pd.DataFrame({
'State':['am','am','am','am','am','am','am','am','am','fg','fg','fg','fg','fg','fg','fg'],
'PC':['A','A','A','A','B','B','B','B','B','C','C','C','D','D','D','D'],
'Party':['alpha','beta','delta','yellow','alpha','beta','blue','pink','gamma','alpha','beta','kappa','alpha','gamma','kappa','lambda'],
'Votes':[10,15,50,5,11,2,5,4,60,3,1,70,12,34,52,43]
})

我想添加一个“总计”列,其中包含每台 PC 的投票总和。请注意,PC 可以具有相同的名称(例如,上面的“A”处于两个不同的状态“am”和“fg”,因此我们希望将它们分别求和,因为它们是不同的 PC)。我这样做如下

df['Total'] = df.groupby(['State','PC']).Votes.transform('sum')

之后,我只想为“State”和“PC”的每个组合保留“Vote”的前两个“Party”,除非前两个不包含“beta”。在这种情况下,我想要第三行作为“beta”。然后,我想在新行中捕获任何剩余的“投票”计数,并根据需要将“政党”设置为“休息”。

总而言之,我想要的输出如下:

df_out = pd.DataFrame({
'State':['am','am','am','am','am','am','am','fg','fg','fg','fg','fg','fg'],
'PC':['A','A','A','B','B','B','B','C','C','C','A','A','A'],
'Party':['delta','beta','REST','gamma','alpha','REST','beta','kappa','alpha','beta','kappa','lambda','REST'],
'Votes':[50,15,15,60,11,9,2,70,3,1,52,43,46],
'Total':[80,80,80,82,82,82,82,74,74,74,141,141,141]
})

我该怎么做?

最佳答案

这是使用 groupby head 的一种方法,并将其他方法与 groupby + agg 结合起来,然后 concat back ,如果前两个不包含 beta,我会将该行添加到 s1

s1=df.sort_values('Votes').groupby(['PC','State']).tail(2)
s2=df[~df.index.isin(s1.index)]
s1=pd.concat([s1,s2.loc[s2.Party=='beta']])
s2=s2[~s2.index.isin(s1.index)].groupby(['PC','State']).agg({'Votes':'sum','Total':'first'}).assign(Party='REST')
yourdf=pd.concat([s1,s2.reset_index()],sort=True).sort_values(['PC','State'])
yourdf
Out[517]:
PC Party State Total Votes
1 A beta am 80 15
2 A delta am 80 50
0 A REST am 80 15
4 B alpha am 82 11
8 B gamma am 82 60
5 B beta am 82 2
1 B REST am 82 9
9 C alpha fg 74 3
11 C kappa fg 74 70
10 C beta fg 74 1
15 D lambda fg 141 43
14 D kappa fg 141 52
2 D REST fg 141 46

关于python - 向 pandas 数据帧添加额外的行以捕获剩余值(value),同时保留每个行的前 2 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55447120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com