2016-03-21 3 views
2

Dies könnte ein Duplikat Pandas: Filtering pivot table rows where count is fewer than specified value sein, aber ich erhalte einen NaN FehlerPandas Filter Pivot-Tabelle nach Wert

ich einen Datenrahmen (df) von Aufträgen habe, um Werte, Kunden-ID und Daten;

Ich möchte die Gesamtausgaben der Gäste, die mehr als einmal, drei und zehn Mal über die Dauer bestellen.

 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 Druck

    ct_order order_value   
        sum  mean  sum 
guest_id        
    4813   1 2020.6400 2020.64 

erzeugt eine Tabelle, aber wenn ich

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

versuchen erhalte ich eine Liste von NaN,

   ct_order order_value   
        sum  mean  sum 
guest_id        
    4813   NaN NaN NaN 


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

gibt eine Liste von True/Falsch

[   sum 
    guest_id  
     4813  True 
     6517  True 
     7876  False 

Warum kann das Wahr/Falsche NaN zurückgeben?

Dieses Beispiel Filtering based on the "rows" data after creating a pivot table in python pandas scheint nur auf den Index nicht die Werte zu filtern.

(groupby level = 0 nicht nachgibt, die entweder korrekte Ergebnisse) dank

+0

Liegt es daran, dass in Ihrem 'daily order_value' ein Unterstrich fehlt? – Jarad

+0

aktualisiert mit Ihren Änderungen und Anregungen @johnE, Danke für die Zeit nehmen – conr404

+1

Richtig, aber ich meine ganz oben, es ist schön, Code zu haben, um das Original-df (oder eine kleine Annäherung) zu konstruieren. Andernfalls kann niemand seinen Code testen, um festzustellen, ob er funktioniert, es sei denn, er erstellt einen Beispieldatenrahmen, der möglicherweise nicht das gleiche Problem aufweist wie Sie. – JohnE

Antwort

2

Erste i Spalten umbenennen würde (nach der Aggregation) wie folgt aus:

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

jetzt können Sie einfach dies tun:

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

Danke .... die Spalten zu benennen war nicht etwas, was ich dachte. – conr404

+0

@ conr404, froh, dass ich helfen könnte :) – MaxU

+0

Ein möglicher Grund, warum Sie NAs für Pnon_merch erhalten [Pnon_merch ["ct_order"] == 1] ist, dass Sie mit einem Multi-Index arbeiten. Versuchen Sie es mit Pnon_merch [Pnon_merch [('ct_order', 'sum')] == 1]. –