Python:将一个数据帧中的列与另一个数据帧中的列进行累加和分割

Python:将一个数据帧中的列与另一个数据帧中的列进行累加和分割,python,pandas,numpy,Python,Pandas,Numpy,我有2个数据帧,如下所示。我需要一个结果数据,其中数据帧1的周期累计和除以python中数据帧2的周期累计和,在pin、site和department索引 数据帧1: 数据帧2: 输出 无论两个数据帧中管脚的顺序如何,我都需要如上所述的结果数据帧。周期数将逐月增加。我认为需要将索引按除法对齐,最后添加多索引中的列: df11 = df1.set_index(['Pin','Site','Department']).cumsum(axis=1) df22 = df2.set_index(['Pin

我有2个数据帧,如下所示。我需要一个结果数据,其中数据帧1的周期累计和除以python中数据帧2的周期累计和,在pin、site和department索引

数据帧1: 数据帧2: 输出 无论两个数据帧中管脚的顺序如何,我都需要如上所述的结果数据帧。周期数将逐月增加。

我认为需要将索引按除法对齐,最后添加
多索引中的列:

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
需要反转条件-保留值
是否保证数据帧中的Pin、Site和Department列相同?^如果是,则可以尝试使用
df1.iloc[:,3::.cumsum(axis=1).div(df2.iloc[:,3:.cumsum(axis=1))
数据帧1和2的顺序可能会发生变化。但是每个pin都有唯一的站点和部门。如果订单发生变化,您应该如何将数据从一个映射到另一个?还有,你不认为这是你在问题中忽略提到的重要信息吗?如果有人决定做出这样的假设并回答你的问题,他们会浪费他们的时间和你的时间。请在您的问题中添加所有相关信息,谢谢。谢谢您指出。我已按建议更改了问题。@jezrael非常感谢!!代码运行得非常好@斯里坎特-不客气!如果我的答案有帮助,别忘了——点击答案旁边的复选标记,将其从灰色变为填充。谢谢。@jezrael完成了!!再一次,非常感谢@jezrael除了输出之外,我还想删除任何时段中值大于1的行。你能帮我解决这个问题吗?
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)
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
df = df11.div(df22)
df = df[(df <= 1).all(axis=1)].reset_index()