根据列条件移动单元格值
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
我想根据列和 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