请参阅下面的数据集。
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']
但是,此方法虽然提供了我想要的方法,但是效率很低,因为我必须对“付费”进行相同的计算,然后执行联接。 有没有更简单的方法来执行所需的输出?
也许我不需要使用数据透视表?
答案 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