2016-12-29 13 views
3

我有一个数据帧中,我有这些列名如何在定义掩码为真时更改特定的列值?

  • 'TEAM1',
  • 'TEAM2',
  • '城市',
  • '日期'。

我想要做的是在某些条件满足时(我使用mask定义)将'city'的值赋值为'dubai'。

这是我做的究竟是什么:

matches[((matches['team1']=='mi') & (matches['team2']=='rcb') & (matches['date']=='2014-04-19')),'city']='Dubai' 

当所有上述条件满足我想在“城市”(现为空)来更改值“迪拜”

问题这产生了:

'系列' 的对象是可变的,因此它们不能被散列

我该怎么做?

+0

使用'.loc'像'matches.loc [((匹配[ 'TEAM1'] == 'MI')及(匹配[ 'TEAM2'] == 'RCB')及(匹配[”日期'] =='2014-04-19')),'city'] ='迪拜' – Zero

+0

谢谢先生@JohnGalt你能解释一下两者之间的区别吗?我感到困惑。谢谢各位 –

+0

阅读关于[索引和选择数据](http://pandas.pydata.org/pandas-docs/stable/indexing.html)在熊猫。访问方法'pd [ix]'和'pd。col'依赖于Numpy索引和Python属性,并且承载这些限制。熊猫特定的访问方法,如'.loc [ix,col]'是首选。 – FTP

回答

3

括号([])表示法访问python对象的__getitem__方法(如果它有一个定义的方法)。对于pd.DataFrame对象时,可以通过托架df[array_like_object]传递状物体的阵列,它会做几件事情之一

可能性1

# returns a copy of df with columns ['col1', 'col2'] 
df[['col1', 'col2']] 

可能性2

# returns a slice of which rows have corresponding trues in the mask 
df[boolean_mask] 

跳过其他的可能性


你已经有了一个boolean_mask

((matches['team1']=='mi') & 
(matches['team2']=='rcb') & 
(matches['date']=='2014-04-19')) 

而一个column

'city' 

在这种情况下,它是完美的loc可以处理正是
Per @JohnGalt

matches.loc[ 
    ((matches['team1']=='mi') & 
    (matches['team2']=='rcb') & 
    (matches['date']=='2014-04-19')), 
    'city' 
] = 'Dubai' 
相关问题