输入
df=pd.DataFrame({'Name':['JOHN','ALLEN','BOB','NIKI','CHARLIE','CHANG'],
'Age':[35,42,63,29,47,51],
'Salary_in_1000':[100,93,78,120,64,115],
'FT_Team':['STEELERS','SEAHAWKS','FALCONS','FALCONS','PATRIOTS','STEELERS']})
n1=(df['Age']< 60)
n2=(df['Salary_in_1000']>=100)
n3=(df['FT_Team'].str.startswith('S'))
Run Code Online (Sandbox Code Playgroud)
使用这些条件进行选择,它将返回 JOHN 和 CHANG。
目标
我想创建未选择数据的数据框和一个返回不期望条件的新列。例如,
* ALLEN: n1, n2
* BOB: n2,n3
* NIKI: n3
* CHANG: n2,n3
Run Code Online (Sandbox Code Playgroud)
新列名称为reason. 值是条件变量,类型是字符串。
尝试
我必须尝试每个条件并手动记录每个变量违反哪些规则。
创建一个新的数据框,然后.dot在布尔值和列名称上使用矩阵。
s = pd.DataFrame({'n1' : n1, 'n2' : n2, 'n3' : n3})
df['reason'] = s.eq(False).dot(s.columns +',').str.rstrip(',')
print(df)
Name Age Salary_in_1000 FT_Team reason
0 JOHN 35 100 STEELERS
1 ALLEN 42 93 SEAHAWKS n2
2 BOB 63 78 FALCONS n1,n2,n3
3 NIKI 29 120 FALCONS n3
4 CHARLIE 47 64 PATRIOTS n2,n3
5 CHANG 51 115 STEELERS
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |