Ich habe eine Liste, to_delete, von Zeilenindizes, die ich aus beiden meiner beiden Pandas-Dataframes löschen möchte, df1 & df2. Sie haben beide 500 Reihen. to_delete hat 50 Einträge. Ich laufe dies:Versuch, mehrere Zeilen aus Pandas Dataframe zu löschen, aber mehr Zeilen als beabsichtigt gelöscht werden
df1.drop(df1.index[to_delete], inplace=True)
df2.drop(df2.index[to_delete], inplace=True)
Aber dies führt zu DF1 und DF2 jeweils 250 Zeilen aufweisen. Es löscht 250 Zeilen von jedem, und nicht die 50 bestimmten Zeilen, die ich möchte ...
to_delete ist in absteigender Reihenfolge angeordnet.
Die vollständige Methode:
def method(results):
#results is a 500 x 1 matrix of 1's and -1s
global df1, df2
deletions = []
for i in xrange(len(results)-1, -1, -1):
if results[i] == -1:
deletions.append(i)
df1.drop(df1.index[deletions], inplace=True)
df2.drop(df2.index[deletions], inplace=True)
Irgendwelche Vorschläge, was ich falsch mache?
(Ich habe auch versucht .iloc
anstelle von .index
und Löschen in der if statement
anstatt zuerst auf eine Liste angehängt wird.
Wenn Indizes von df nicht eindeutig ist (zB 'data = pd.DataFrame (np.arange (12) .reshape (4,3), Säulen = [ 'a', 'b', 'c' ], index = [1,1,2,3]) '), dann' data.drop (data.index [[1,2]], inplace = True) 'löscht drei Zeilen, auch wenn Sie bereits bestanden haben nur zwei zu löschende Indizes –