通过pandas如何实现如下问题?

img


如图所示,数据分成三组,分别对每组进行计算,如第一组a, 我想实现score列 第1行到第2行是一个变化,这时候取第1行值3,之后取reward列第1行和第2行差值2-1=1,得到计算值31=3,下一组score列第2行到第3行取第2行数据 5,reward列取5-2=3,得到计算值 53=15,以此类推知道一组结束,求得这一组所有计算值之和生成新列,通过pandas该如何实现?

先分组,后对数据进行处理,可以用循环和数据框添加方法来做,参考代码:

import pandas as pd

df=pd.DataFrame({'name':['a']*4+['b']*3+['c']*2,'score':[3,5,3,9,6,5,10,10,12],'reward':[1,2,5,6,3,4,10,11,14]})
dfs=df.groupby('name')[['score','reward']]
dff=pd.DataFrame()
for name,df in dfs:
    df=df.reset_index().drop('index',axis=1)
    print(df)
    x=[]
    for i in range(len(df)-1):
        x.append((df.loc[i+1,'reward']-df.loc[i,'reward'])*df.loc[i,'score'])
    x.append("")
    df['proc']=x    
    dff=dff.append(df,ignore_index=False)
dff=dff.reset_index().drop('index',axis=1)
print(dff)

运行结果:

  name  score  reward proc
0    a      3       1    3
1    a      5       2   15
2    a      3       5    3
3    a      9       6
4    b      6       3    6
5    b      5       4   30
6    b     10      10
7    c     10      11   30
8    c     12      14

有帮助麻烦点个采纳【本回答右上角】,谢谢