2015-12-28 110 views
1

我有一個熊貓數據幀(DF)具有柱狀結構:用祿來更新數據幀蟒蛇熊貓

month a b c d 

該數據幀有數據說一月,二月,三月,四月A,B, C,D是數字列。對於月月,我要重新計算列A和更新的數據幀,即對月=月,A = B + C + d

碼我用:

df[df['month']=='Feb']['A']=df[df['month']=='Feb']['B'] + df[df['month']=='Feb']['C'] + df[df['month']=='Feb']['D'] 

這種電腦採用了無差錯但並未更改2月份列A中的值。在控制檯中,它給出了一條消息:

正試圖在來自DataFrame的切片的副本上設置一個值。
嘗試使用的.loc [row_indexer,col_indexer] =值,而不是

我試圖用的.loc但現在我工作的數據幀,我曾用它.reset_index(),我不知道如何設置索引和使用.loc。我遵循文檔,但不清楚。你能幫我出來嗎? 這是一個示例數據框:

import pandas as pd import numpy as np 
dates = pd.date_range('1/1/2000', periods=8) 
df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D']) 

我想更新說一個日期:2000-01-03。我無法給出我的數據片段,因爲它是實時數據。

+0

你能附上你的數據框的一個小例子嗎? –

+0

@AntonProtopopov:我正在處理的數據框很大,我試着在這裏解釋邏輯。我會看看我是否可以創建任何數據幀 –

+1

,您可以使用'df.head()'或'df.iloc [:10,:10]'' –

回答

2

正如您從警告中看到的那樣,您應該使用loc[row_index, col_index]。當您將數據進行子集化時,您可以獲得索引值。你只需要通過對ROW_INDEX,然後用逗號COL_NAME:

df.loc[df['month'] == 'Feb', 'A'] = df.loc[df['month'] == 'Feb', 'B'] + df.loc[df['month'] == 'Feb', 'C'] + df.loc[df['month'] == 'Feb', 'D'] 
1

雖然不是最漂亮的,我會實現自己的目標(不超過行明確迭代)的方式是:

df.ix[df['month'] == 'Feb', 'a'] = df[df['month'] == 'Feb']['b'] + df[df['month'] == 'Feb']['c']