根据列条件移动单元格值

Shift cell value based on column conditions

我想根据列和 A B C 以及 "Type" 列内的值移动值。

这是我的数据框:

Name   Type   A   B   C
John   AR     W   S   W
John   BR   
John   CR
Jack   AR     S   S   A
Jack   BR   
Jack   CR

使用熔化函数前所需的数据框:

Name   Type   A   B   C
John   AR     W       
John   BR         S
John   CR             W
Jack   AR     S       
Jack   BR         S
Jack   CR             A

尝试在每一列上使用移位函数:

import pandas as pd

df = pd.DataFrame({'A':['W','','','S','',''],'B':['S','','','S','',''],'C':['W','','','A','','']})

df.B = df.B.shift(1)

df.C = df.C.shift(2)

你可以用这个。

def func(x):
    for col in x.columns[2:]:
        for index,val in x.iterrows():
            if val.Type[0]==col:
                x[col]=x[col].shift(index-x.index[0])
    return x
df.groupby('Name').apply(func).fillna(' ')

输入

    Name    Type    A   B   C
0   John    AR      W   S   W
1   John    BR          
2   John    CR          
3   Jack    AR      S   S   A
4   Jack    BR          
5   Jack    CR  

输出

   Name     Type    A   B   C
0   John    AR      W       
1   John    BR          S   
2   John    CR              W
3   Jack    AR      S       
4   Jack    BR          S   
5   Jack    CR              A