Pandas 数据框:根据条件替换值
这里有一个只有一列的数据表
disposition
---------
NO ANSWER
ANSWERED
FAILED
BUSY
ERROR
WARNING
CANCEL
代码:
import pandas as pd
data1 = {'disposition': ['NO ANSWER', 'ANSWERED', 'FAILED', 'BUSY', 'ERROR', 'WARNING', 'CANCEL']}
df = pd.DataFrame(data1)
如何根据条件来替换值:
WHEN disposition = 'NO ANSWER' THEN 0
WHEN disposition = 'ANSWERED' THEN 1
WHEN disposition = 'FAILED' THEN 2
WHEN disposition = 'BUSY' THEN 3
ELSE 9
想要的结果是
disposition
---------
0
1
2
3
9
9
9
2 个回答
1
map
选项是一种简单明了的方法。还有另一种选择,就是进行合并或者替换。你也可以使用case_when
,不过目前它只适用于序列。你需要传入一个元组的列表,其中元组的第一个部分是条件,第二部分是替换的内容。
caselist = [(df.disposition.eq('NO ANSWER'), 0),
(df.disposition.eq('ANSWERED'), 1),
(df.disposition.eq('FAILED'), 2),
(df.disposition.eq('BUSY'),3)]
df.assign(outcome=pd.Series(9,index=df.index).case_when(caselist))
disposition outcome
0 NO ANSWER 0
1 ANSWERED 1
2 FAILED 2
3 BUSY 3
4 ERROR 9
5 WARNING 9
6 CANCEL 9
4
代码
m = {'NO ANSWER': 0, 'ANSWERED': 1, 'FAILED': 2, 'BUSY': 3}
df['disposition'] = df['disposition'].map(m).fillna(9).astype('int')
数据框
disposition
0 0
1 1
2 2
3 3
4 9
5 9
6 9