Pandas 数据框:根据条件替换值

0 投票
2 回答
44 浏览
提问于 2025-04-12 07:45

这里有一个只有一列的数据表

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

撰写回答