Pandas 如何根据多个值的条件替换值

时间:2021-04-26 15:33:20

标签: python pandas dataframe

我有一个包含多列的数据框,下面是该数据框中的前 3 列:

data_df = pd.DataFrame({'id':['era','bb','cs','jd','ek','gtf','okg','huf','mji','loj','djjf','wloe','rfm','cok'],
                        'doc':[1050 ,580,170,8, 7, 220, 45155,305,458,201,48,78,256,358],
                       'dif':[1,1,1,3,3,2,2,3,4,5,8,7,9,10]})
data_df
    id    doc      dif
0   era   1050     1    
1   bb    580      1    
2   cs    170      1    
3   jd    8        3    
4   ek    7        3    
5   gtf   220      2    
6   okg   45155    2    
7   huf   305      3    
8   mji   458      4    
9   loj   201      5    
10  djjf  48       8    
11  wloe  78       7    
12  rfm   256      9    
13  cok   358      10

我想像相反一样更改“dif”列中的值。我的意思是我想把 1 改成 10、2 改成 9、3 改成 8、.... 10 改成 1。我该怎么做? 我试图像下面那样做,但后来我无法确定下次要更正哪些值。

data_df.loc[(data_df.dif == 1),'dif']= 10
data_df['dif'].mask(data_df['dif'] == 2, 9, inplace=True)

任何帮助将不胜感激。提前致谢

3 个答案:

答案 0 :(得分:2)

创建一个用于映射的字典 -

dict1 = dict(zip(range(1, 11), range(10,0,-1)))
data_df['dif'] = data_df['dif'].map(dict1)

答案 1 :(得分:2)

new_df = data_df.assign(dif=11 - data_df['dif'])

或者,如果您想就地进行:

data_df['dif'] = 11 - data_df['dif']

答案 2 :(得分:0)

其实很简单:

CONTAINER ID   IMAGE      COMMAND                  CREATED              STATUS         PORTS      NAMES
46105f7fdf9c   postgres   "docker-entrypoint.s…"   About a minute ago   Up 5 seconds   5432/tcp   compose_db2_1
fce9b8e2fc62   postgres   "docker-entrypoint.s…"   About a minute ago   Up 4 seconds   5432/tcp   compose_db_1

或将 11 替换为 >>> data_df["dif"] = 11 - data_df["dif"] >>> data_df id doc dif 0 era 1050 10 1 bb 580 10 2 cs 170 10 3 jd 8 8 4 ek 7 8 5 gtf 220 9 6 okg 45155 9 7 huf 305 8 8 mji 458 7 9 loj 201 6 10 djjf 48 3 11 wloe 78 4 12 rfm 256 2 13 cok 358 1