2016-12-29 16 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' 
相關問題