根据pandas中的条件替换行上的多个值

时间:2017-11-07 23:48:05

标签: python-3.x matlab pandas

我有大约1000条记录的csv。报告中的一列称为级别,包括字符串数据,如级别1,级别2等。大约有30个级别。级别代表公司的收入水平。因此,公司1级意味着它们的收入不到1M。我可以通过执行以下操作找到一种逐个替换值的方法:

df.loc[df['Level'] == 'Level 1', 'Level'] = 1000000

我有办法将相同的逻辑应用于所有记录吗?也许我可以把所有东西扔进字典里:

dict = {
       'Level 1': 1000000,
       'Level 2': 2000000, 
}

我想按类型和收入水平对所有公司进行分散图,所以也许在matlab中有一种方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

使用pd.Series.map

考虑df

df = pd.DataFrame(dict(
    Level=['Level {}'.format(i) for i in [1, 2, 3, 2, 1]],
    Other=range(5)
))

df

     Level  Other
0  Level 1      0
1  Level 2      1
2  Level 3      2
3  Level 2      3
4  Level 1      4

分配您的dct

dct = {'Level 1': 1000000,
       'Level 2': 2000000,
       'Level 3': 3000000}

df.assign(Level=df.Level.map(dct))

     Level  Other
0  1000000      0
1  2000000      1
2  3000000      2
3  2000000      3
4  1000000      4

答案 1 :(得分:2)

我认为您可以使用replace

df['Level'] = df['Level'].replace(dict)

注意:您不应该使用dict作为变量名称,因为它会影响buildin dict