2015-12-28 2 views
1

У меня есть панд dataframe (DF) со структурой колонки:Использование LOC для обновления dataframe питона панд

month a b c d 

это dataframe имеет данные для скажем Jan, Feb, Mar, Apr. A, B, C, D - числовые столбцы. В течение месяца февраля, я хочу, чтобы пересчитать столбец А и обновлять его в dataframe, т.е. за месяц = ​​Feb, A = B + C + D

код я использовал:

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

Это создалась без ошибок но не изменил значения в столбце А за месяц Февраль. В консоли было получено сообщение:

Значение, которое нужно установить на копии фрагмента из DataFrame.
Попробуйте использовать .loc [row_indexer, col_indexer] = значение вместо

Я пытался использовать .loc но сейчас dataframe я работаю, я использовал .reset_index() на него, и я не уверен, как установить индекс и использование .loc. Я следовал документации, но не ясен. Не могли бы вы помочь мне здесь? Это пример dataframe:

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: Dataframe, над которым я работаю, большой, я попытался объяснить здесь логику. Я посмотрю, смогу ли я создать какой-либо файл данных –

+1

, который вы могли бы прикрепить как часть вашего фрейма данных с помощью 'df.head()' или 'df.iloc [: 10,: 10]' –

ответ

2

Как вы могли видеть из предупреждения, вы должны использовать loc[row_index, col_index]. Когда вы подмножите свои данные, вы получите значения индекса. Вам просто нужно пройти для row_index, а затем с запятой имя_столбцем:

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'] 
Смежные вопросы