Ausgabe
Ich versuche zu zählen, wie viele Zeilen eine bestimmte Bedingung erfüllen, aber ich möchte, dass sich diese Bedingung nach jeder Neuberechnung ändert. Beispieldaten habe ich:
data={'ID':['1','2','3','4'],'X':[23,22,21,24],'Y':[44,45,41,46],'X_MIN':[22,21,20,23],'Y_MIN':[43,44,40,45]}
ICH WÜRDE | X | Y | X_MIN | Y_MIN |
---|---|---|---|---|
1 | 23 | 44 | 22 | 43 |
2 | 22 | 45 | 21 | 44 |
3 | 21 | 41 | 20 | 40 |
4 | 24 | 46 | 23 | 45 |
Dies ist die ID des Geschäfts und seine Koordinaten. Ich möchte überprüfen, wie viele Geschäfte sich unter einem einzelnen Geschäft befinden. Also muss ich der gesamten Datenbank das Minimum X und Y jedes Speichers zuweisen und prüfen, wo X>=X_MIN und Y>=Y_MIN. Ich habe versucht, eine Schleife zu erstellen, die einen neuen Datenrahmen erstellt und alle X_MIN und Y_MIN durch konstante Werte aus der ersten Zeile meiner Daten ersetzt. Dann wollte ich filtern, wie viele Fälle die Bedingung erfüllen, sie zählen und der Liste hinzufügen. Und auf diese Weise wiederholen Sie die Aktion, indem Sie über die Zeilen iterieren. Was ich getan habe, ist unten:
test=df
calc=[]
for i, row in df.iterrows():
test['X_MIN']=row['X_MIN']
test['Y_MIN']=row['Y_MIN']
count=test[['X','Y','X_MIN','Y_MIN']].query('X>=X_MIN and Y>=Y_MIN')
a=count['X'].count()
calc.append(a)
Ich möchte zu einer Beispieltabelle kommen:
final={'ID':['1','2','3','4'],'count':[3,3,4,1]}
ICH WÜRDE | zählen |
---|---|
1 | 3 |
2 | 3 |
3 | 4 |
4 | 1 |
Der Befehl zählt jedoch endlos. Ich bitte um Hilfe bei der Lösung dieses Problems.
Lösung
Vielleicht ist dieser Code das, wonach Sie suchen. Es generiert eine Spalte, count
in der Sie für jede ID
die Anzahl anderer IDs haben, die beide X
und Y
größer oder gleich als sie selbst haben
import pandas as pd
data= pd.DataFrame({'ID':['1','2','3','4'],'X':[23,22,21,24],'Y':[44,45,41,46]})
data['count'] = data.apply(lambda x: len(data[(data['X'] >= x['X'])&(data['Y'] >= x['Y'])]),axis=1)
Beantwortet von – imburningbabe
Antwort geprüft von – Senaida (FixError Volunteer)