2016-03-21 4 views
2

Это может быть дубликатом Pandas: Filtering pivot table rows where count is fewer than specified value, но я получаю ошибку NaNПанды фильтра сводной таблицы по значению

У меня есть кадр данных (Df) заказов, стоимости заказов, идентификатор клиента и даты;

id, date, order_count, daily_order_value 

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

 Pnon_merch = pivot_table(dffilter, index =["guest_id"] 

          , values=['ct_order','order_value'] 
          ,aggfunc= {'ct_order':np.sum,'order_value': [np.sum,np.mean]}) 

печати Pnon_merch

    ct_order order_value   
        sum  mean  sum 
guest_id        
    4813   1 2020.6400 2020.64 

создает таблицу, но когда я пытаюсь

 Pnon_merch_is1 = Pnon_merch[Pnon_merch["ct_order"]==1] 

Я получаю список NaN,

   ct_order order_value   
        sum  mean  sum 
guest_id        
    4813   NaN NaN NaN 


    truefalse = [Pnon_merch["ct_order"]==1] 

дает список True/Неверно

[   sum 
    guest_id  
     4813  True 
     6517  True 
     7876  False 

Почему истинный/ложный возврат NaN?

Этот пример Filtering based on the "rows" data after creating a pivot table in python pandas, по-видимому, фильтрует только по индексу NOT значения.

(уровень GroupBy = 0 не дает правильные результаты либо) благодаря

+0

Это потому, что в вашем 'daily order_value' отсутствует символ подчеркивания? – Jarad

+0

обновлен с вашими изменениями и предложениями @johnE, спасибо, что нашли время – conr404

+1

Правильно, но я имею в виду, что на самом верху неплохо иметь код для создания исходного df (или небольшого приближения). В противном случае никто не сможет проверить свой код, чтобы убедиться, что он работает, если они не создают образец данных, который может не иметь той же проблемы, что и у вас. – JohnE

ответ

2

Сначала я бы переименовывать столбцы (после агрегации) так:

Pnon_merch.columns = ['ct_order_sum','order_value_mean','order_value_sum'] 

теперь вы можете просто сделать это:

Pnon_merch_is1 = Pnon_merch[Pnon_merch["ct_order_sum"]==1] 
+0

Спасибо .... Названия столбцов не были чем-то, что я думал сделать. – conr404

+0

@ conr404, рад, что я мог бы помочь :) – MaxU

+0

Возможная причина, по которой вы получаете NA для Pnon_merch [Pnon_merch ["ct_order"] == 1] заключается в том, что вы работаете с мультииндексисом. Попробуйте использовать Pnon_merch [Pnon_merch [('ct_order', 'sum')] == 1]. –

Смежные вопросы