热线电话:13121318867

登录
2019-02-13 阅读量: 618
取两个Multilevel索引Pivot表列的差异

data={'Claim Number':[200932768,102349182,200943556,200932768,300943556,400943556],'Reserve':[200000,50000,0,200000,5000,0],'Paid':[0,139000,0,0,139000,0],'Key':['Feb','Feb','Feb','March','March','March']}

df=pd.DataFrame(data)

table=df.pivot_table(index='Claim Number',columns='Key',values=['Reserve','Paid'],fill_value=0)

我正在尝试创建两个额外的列Change in Reserve,以及Change in Paid。

这将是[3月储备变化] - [2月储备变化]的差异,以及“付费”的变化。

我一直在做的是单挑坑“储备”和付费如下。

table=df.pivot_table(index='Claim Number',columns='Key',values=['Reserve'],fill_value=0)

table.reset_index(inplace=True)

table["Change in Reserve"]=table['March']-table['Feb']

但是,这种方法虽然提供了我想要的效率低下,因为我必须对“付费”进行相同的计算,并执行连接。是否有更简单的方法来执行所需的输出?

也许我使用数据透视表的方法是不必要的?

解决办法:

df_g = df.groupby(['Claim Number', 'Key']).sum().reset_index()

diff_claim = df_g['Claim Number'] == df_g['Claim Number'].shift()

reserve_change = df_g['Reserve'] - df_g['Reserve'].shift()

ls = pd.Series([])

for index, value in reserve_change.iteritems():

if diff_claim[index]:

ls[index] = reserve_change[index]

else:

ls[index] = None

df_g['change'] = ls

39.7527
2
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子