根据列条件移动单元格值



我想根据列和 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

尝试在每列上使用 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)

你可以使用它。

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

相关内容

最新更新