在pandas DataFrame中设置具有多个重复索引的值

时间:2015-11-17 17:21:31

标签: python pandas dataframe slice

我的DataFrame有多个重复索引,我的问题是如何将A中的行col2的值设置为 0 到其他价值,说 8

案例1:

In [82]: df = pd.DataFrame({'col1':[1,2,3], 'col2':[9,9,0]}, index=['A','B','A'])

In [83]: df
Out[83]: 
   col1  col2
A     1     9
B     2     9
A     3     0

我知道这个小而固定的DataFrame我可以使用ix方法获得所需的位置,如下所示:

所需结果(从A 3 0A 3 8的第3行更改):

In [84]: df.ix[2, 1] = 8                                                       

In [85]: df                                                                    
Out[85]:                                                                       
   col1  col2                                                                  
A     1     9                                                                  
B     2     9                                                                  
A     3     8     

但是对于一些具有多个重复索引的大型且不断变化的DataFrame,如何将值{strong> 0 的A中的行col2的值设置为其他值?

案例2:

In [90]: df2 = pd.DataFrame({'col1':[1,2,3,4], 'col2':[9,9,0,9]}, index=['A','B','A','A'])

In [91]: df2                                                                 
Out[91]:                                                                    
   col1  col2                                                               
A     1     9                                                               
B     2     9                                                               
A     3     0                                                               
A     4     9  

所需结果(从A 3 0A 3 8的第3行更改):

In [91]: df2                                                                 
Out[91]:                                                                    
   col1  col2                                                               
A     1     9                                                               
B     2     9                                                               
A     3     8                                                               
A     4     9  

案例3:

In [94]: df3 = pd.DataFrame({'col1':[1,2,3,4], 'col2':[9,9,0,0]}, index=['A','B','B','A'])

In [95]: df3                                                                
Out[95]:                                                                    
   col1  col2                                                               
A     1     9                                                               
B     2     9                                                               
B     3     0                                                               
A     4     0 

所需结果(从A 4 0A 4 8的第4行更改):

In [95]: df3                                                                
Out[95]:                                                                    
   col1  col2                                                               
A     1     9                                                               
B     2     9                                                               
B     3     0                                                               
A     4     8 

1 个答案:

答案 0 :(得分:3)

df.loc[(df.index == 'A') & (df.col2 == 0), 'col2'] = 8