例如,我有一个像这样的 DataFrame:
Rank #1 Rank #2 Rank #3 Rank #4 status
0 A B D C in
1 B C A D out
2 A D C B in
3 A B C D out
4 D C B A out
5 D A C B out
...
如果status == out
,如何删除 A 值,然后将其他行排名值向左移动?
我的预期结果是:
Rank #1 Rank #2 Rank #3 Rank #4 status
0 A B D C in
1 B C D out
2 A D C B in
3 B C D out
4 D C B out
5 D C B out
...
这是一种方法。
import pandas as pd, numpy as np
df = pd.DataFrame({1: ['A', 'B', 'A','A', 'D', 'D'],
2: ['B', 'C', 'D', 'B', 'C', 'A'],
3: ['D', 'A', 'C', 'C', 'B', 'C'],
4: ['C', 'D', 'B', 'D', 'A', 'B'],
'status': ['in', 'out', 'in', 'out', 'out', 'out']})
mask = df['status'] == 'out'
df.loc[mask, :] = df.loc[mask, :].replace('A', '')
A = [list(''.join(i)) for i in df.iloc[:, :-1].values]
df_res = pd.DataFrame(A).fillna('').assign(result=df.status)
结果
0 1 2 3 result
0 A B D C in
1 B C D out
2 A D C B in
3 B C D out
4 D C B out
5 D C B out
说明
- 将所选行的“A”替换为空字符串。
- 通过列表理解将条目向左移动。
- 创建结果数据框并添加回“状态”列。
我是一名优秀的程序员,十分优秀!