2017-03-15 6 views
0

Hallo Ich habe zwei Spalten appt_number und Status I mit duplizierten appt_number in den Reihen interessiert bin wie:Wie bekomme ich die folgende Abfrage?

  appt_number  status 
191624  100001718895 complete 
41105  100001718895 notdone 

ich alle Werte mit notdone zuerst und dann etwas anderes wie das Beispiel bekommen möchte einfach mal von die oben zum Beispiel ist dieser Fall nicht wichtig für mich:

81735  100002203648 cancelled 
81738  100002203648 suspended 

, da es nicht mit notdone startet

ich versuchte:

print(df[['appt_number','status']]).sort(['appt_number'],ascending=True) 

jedoch habe ich, so ich brauche dieses Ergebnis zu reinigen, um die gewünschten Fälle zu erhalten:

  appt_number  status 
140935  100000444380 complete 
77626  1000011340 complete 
222687  100001204805 complete 
191624  100001718895 complete 
41105  100001718895 notdone 
293961  100002049980 complete 
81735  100002203648 cancelled 
81738  100002203648 suspended 
76059  100003318442 complete 
287598  100003867456 complete 
7733  100004968279 complete 
276560  100006105890 complete 
166713  10000685700 complete 

So würde ich die Unterstützung wirklich zu schätzen diese schwierige Aufgabe zu bewältigen, Nach einem nützlichen Feedback ich habe versucht:

df['counter'] = df.groupby('appt_number').status.transform('size') 
df = df[df.counter >=2] 
df = df[df['status'].isin(['cancelled','complete','notdone','pending','suspended'])] 
#df = df[df.status == 'notdone'] 
print(df[['appt_number', 'status']].sort(['appt_number'],ascending=True)) 

aber ich habe:

  appt_number  status 
41105  100001718895 notdone 
191624  100001718895 complete 
81738  100002203648 suspended 
81735  100002203648 cancelled 
227320  100011167163 pending 
274408  100011167163 suspended 
241047  100011167163 suspended 
274414  100011167163 complete 
274409  100011167163 suspended 
137816  100012143654 complete 

aber ich bin nur interessiert an den Dingen, die notdone anfangs waren und dann wie folgt geändert:

  appt_number  status 
41105  100001718895 notdone 
191624  100001718895 complete 

So würde ich wirklich die Unterstützung schätzen gerade diese Fälle zu erhalten.

+0

können Sie df.head Post (15) Es wird einfacher mit den echten Daten zu arbeiten – Vaishali

Antwort

1

Dies wird den Trick:

In:

df = df[['appt_number','status']].sort_values(by='appt_number', ascending=True) 
df2 = df.loc[df.status == 'notdone'] 
df3 = pd.merge(df, df2, on='appt_number') 
df3 

Out:

appt_number  status_x status_y 
0 101420561364 notdone  notdone 
1 139015260682 notdone  notdone 
... 
n 139144839318 notdone  notdone 
0

versuchen, diese kleine Fella

df['counter'] = df.groupby('appt_number').status.transform('size') 
df = df[df.counter >=2] 
df = df[df.status == 'notdone'] 
+0

danke, aber es gibt immer noch einen Teil, um die komplette Lösung zu haben, aber ich schätze die Unterstützung sehr. – neo33

Verwandte Themen