2016-04-06 17 views
1

zu finden Ich habe eine Datenrahmen wiegemeinsamen Wert in einer Spalte gegen eindeutigen Wert in einer anderen Spalte in Pandas

event cust 
et1 satya 
et1 papu 
et1  abc 
et1 satya 
et1  def 
et2 papu 
et2 satya 
et2 panda 
et3 normal 
et3 panda 
et3 satya 
et3  fgh 

Jetzt muß ich findout ‚benutz‘, die für alle drei Arten von events.so diese existieren sollte nachgeben

event cust 
et1 satya 
et1 satya 

Mach dir keine Sorgen über distinct (Duplikate können entfallen). Für diesen meinen Ansatz ist

x = df[df['event'] == 'et1'] 
y = df[df['event'] == 'et2'] 
z = df[df['event'] == 'et3'] 
df_common = x[x['cust'].isin(y[y['cust'].isin(z.cust)]['cust'])] 

aber dies wird in dem Fall nicht angebracht, wenn der Datenrahmen Größe sehr groß sein wird, und ich habe für einige 50-100 + Veranstaltungen gemeinsam benutz finden.

Bitte schlagen Sie einige Pandas/mehr-Pythonic Weg dazu vor.Vielen Dank im Voraus.

Antwort

1

können Sie versuchen:

#first drop duplicates in each group by event 
df = df.drop_duplicates(['event','cust']) 

#count values 
counts = df.cust.value_counts() 
print counts 
satya  3 
panda  2 
papu  2 
def  1 
normal 1 
fgh  1 
abc  1 
Name: cust, dtype: int64 

#get number of unique events 
uniqevents = df.event.nunique() 
print uniqevents 
3 
#get values with count == uniqevents 
counts = counts[counts == uniqevents] 
print counts 
satya 3 
Name: cust, dtype: int64 

print counts.index.to_series().reset_index(drop=True) 
0 satya 
dtype: object 
+0

@ jezrael-Fein im Fall (gemeinsam für alle Event) .Aber was --wenn i cust möchten, die in einigen ausgewählten events.Like sind erhalten gemeinsame cust für Event et1 & et2 (mit Ausnahme von et3). – Satya

+0

Ok. ich muss meinen dataframe zuerst entsprechend filtern. df = df [df ['events']. isin (['et1', 'et2'])] Dann kann ich Ihrer Herangehensweise folgen. Ich frage mich nur, ob es irgendeine Pandas-Funktion (falls vorhanden) dafür gibt ??? – Satya

+0

Ja, ich möchte etwas Ähnliches wie 'Isin' schreiben. Ich weiß nicht über die Funktion, es zu tun. Ich versuche 'groupby' und' apply', aber ohne Erfolg. – jezrael

Verwandte Themen