取得两个多级索引数据透视表表列的差异

时间:2019-02-12 17:06:56

标签: python pandas

请参阅下面的数据集。

   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)

我正在尝试创建另外两列“储备金变化”和“支付金变化”。

[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']

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

也许我不需要使用数据透视表?

1 个答案:

答案 0 :(得分:0)

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