[英]How to create pandas dataframe based on multi-index column values
我尝试基于多索引列值创建新的数据框列
这是原始数据框
import pandas as pd
b = pd.DataFrame({'i':[1,1,1,2,2],'i2':[1,2,3,1,2],'v':[0.1,0.7,0.2,0.12,0.88] })
b.set_index(['i','i2'], inplace=True)
我想创建两个新列,“ res1”和“ res2”。 两者都从0.0到1.0。
对于每个索引“ i”记录,从最小的“ i2”值开始到最大的“ i2”值。
“ res1”值从0.0开始,最小等于先前的“ v”值加上“ res1”值。
“ res2”值从最小的“ v”值开始,每次都添加“ v”值
我在这里很难解释,所以我创建了两个数据框。 b_expect是最终的预期结果,b_explain是如何生成资源的解释。
b_explain = pd.DataFrame({'i':[1,1,1,2,2],'i2':[1,2,3,1,2],'v':[0.1,0.7,0.2,0.12,0.88], 'res1':[0, '0.1=0.0+0.1', '0.8=0.1+0.7',0.0,'0.12=0.0+0.12'],'res2':['0.1=0.0+0.1','0.8=0.1+0.7','1.0=0.8+0.2','0.12=0.0+0.12','1.0=0.12+0.88']})
b_expect = pd.DataFrame({'i':[1,1,1,2,2],'i2':[1,2,3,1,2],'v':[0.1,0.7,0.2,0.12,0.88], 'res1':[0, 0.1, 0.8,0.0,0.12],'res2':[0.1,0.8,1.0,0.12,1.0]})
b_explain.set_index(['i', 'i2'], inplace=True)
b_expect.set_index(['i', 'i2'], inplace=True)
b
Out[1]:
v
i i2
1 1 0.10
2 0.70
3 0.20
2 1 0.12
2 0.88
b_explain
Out[2]:
v res1 res2
i i2
1 1 0.10 0 0.1=0.0+0.1
2 0.70 0.1=0.0+0.1 0.8=0.1+0.7
3 0.20 0.8=0.1+0.7 1.0=0.8+0.2
2 1 0.12 0 0.12=0.0+0.12
2 0.88 0.12=0.0+0.12 1.0=0.12+0.88
b_expect
Out[3]:
v res1 res2
i i2
1 1 0.10 0.00 0.10
2 0.70 0.10 0.80
3 0.20 0.80 1.00
2 1 0.12 0.00 0.12
2 0.88 0.12 1.00
假设您没有其他NaN值:
b['res1'] = b.groupby(level=0).cumsum()
b['res2'] = b.groupby(level=0).cumsum().shift(1)['v'].fillna(0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.