Python:将一个数据框中的列与具有累积和的另一个数据框分开

时间:2018-05-14 05:01:38

标签: python pandas numpy

我有2个数据框,如下所示。我需要一个结果数据,它具有数据帧1的周期累积和除以在引脚,站点和部门索引的python中数据帧2的周期累积和。

数据帧1:

 Pin    Site    Department   Period1     Period2     Period3     Period4

 1001     L       42           1           0           2           3
 1003     L       42           4           4           3           4
 1002     R       45           4           5           2           4                    

Dataframe 2:

Pin     Site    Department  Period1          Period2    Period3    Period4 

1002      R           45          5            6           5           5 
1003      L           42          4            5           6           8 
1001      L           42          1            2           4           5                    

输出

 Pin    Site    Department  Period1      Period2       Period3         Period4
 1001     L        42          1/1     (1+0)/(1+2)  (1+0+2)/(1+2+4) (1+0+2+3)/(1+2+4+5)
 1002     R        45          4/5     (4+5)/(5+6)  (4+5+2)/(5+6+5) (4+5+2+4)/(5+6+5+5)
 1003     L        42          4/4     (4+4)/(4+5)  (4+4+3)/(4+5+6) (4+4+3+4)/(4+5+6+8)

无论数据帧中的引脚顺序如何,我都需要如上所示的结果数据帧。期数会逐月增加。

1 个答案:

答案 0 :(得分:1)

我认为set_index需要divcumsumreset_index进行对齐,最后为MultiIndex的列添加all

df11 = df1.set_index(['Pin','Site','Department']).cumsum(axis=1)
df22 = df2.set_index(['Pin','Site','Department']).cumsum(axis=1)

df = df11.div(df22).reset_index()
print (df)
    Pin Site  Department  Period1   Period2   Period3   Period4
0  1001    L          42      1.0  0.333333  0.428571  0.500000
1  1002    R          45      0.8  0.818182  0.687500  0.714286
2  1003    L          42      1.0  0.888889  0.733333  0.652174

编辑:

对于过滤输出值>1需要反转条件 - 保留结果<=1 - 比较并检查每行是否here True

df = df11.div(df22)
df = df[(df <= 1).all(axis=1)].reset_index()