根据列条件移动单元格值

时间:2019-11-29 01:31:13

标签: pandas shift

我想根据列和A B C以及“类型”列内的值来移位值。

这是我的数据框:

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

2 个答案:

答案 0 :(得分:1)

尝试在每列上使用shift函数:

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)

答案 1 :(得分:1)

您可以使用它。

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