2016-11-23 3 views
0

Я пытаюсь применить условие if к серии pandas и затем применить операцию деления к другой серии в той же самой кадре данных в отношении целочисленного значения из списка.Pandas условное деление, серия по списку

Логика, которую я пытаюсь применить, заключается в следующем: Если категория домашних хозяйств в серии hh_cat соответствует текущему значению i, то разделите серию потребления на соответствующую общую подгруппу по семейному потреблению, указанную в списке значение family_con[i-1].

for i in hh_cat: 
    result = mod_df[(mod_df["hh_cat"]==i)].div()["consumption"](family_con[i-1]) 

TypeError         Traceback (most recent call last) 
<ipython-input-120-219bc0ce5a07> in <module>() 
    1 for i in hh_cat: 
----> 2  result = mod_df[(mod_df["hh_cat"]==i)].div()["consumption"] (family_con[i-1]) 

TypeError: f() takes at least 2 arguments (1 given) 
+0

непроверенный, но, возможно, попробуй 'mod_df [(mod_df [" hh_cat "] == i)] [" потребление "]. Div (family_con [i-1])' – Leo

+0

больше из stacktrace поможет, что такое 'f '? –

+0

Первое предложение исправляет ошибку, но я пытаюсь найти способ передать результаты в новую серию, которая будет добавлена ​​в dataframe. Я не уверен, что цикл является лучшим способом для этого, но я передал результаты разделения в список, который сохраняет правильные значения, но с переменным индексом, если операция выполняется в разных строках для разных значений я. Я полагаю, что я мог бы прибегнуть к списку в соответствии с номером индекса строк, но он кажется довольно неэффективным. – broonz

ответ

0

Использование слияния может помочь:

Сначала преобразовать список в кадр данных:

df = pd.DataFrame(family_con,columns=['cons']) 

Следующая добавить столбец к исходному кадру данных, который соответствует индекс и может использоваться для соединения:

mod_df["hh_cat_join"]= mod_df["hh_cat"]-1 

Следующая выполнить объединение:

merged_df=mod_df.merge(df,how='left',left_on='hh_cat_join',right_index=True) 

Наконец сделать расчет и сохранить его в результате колонке:

merged_df['result']=merged_df['consumption']/merged_df['cons'] 
+0

Спасибо, это решило! – broonz

0

Я немного не уверены в связи между переменной hh_cat и столбца 'hh_cat', но я думаю, вы могли бы добавить столбец под названием hh_cat_var (соответствующий переменной, которую вы итерируете) и делать

mod_df[mod_df['hh_cat'] == mod_df['hh_cat_var']]....