2016-04-20 8 views
3

Ich habe derzeit ein Datenrahmen, die etwa wie folgt aussieht:Pandas Better Way zu trimmen Daten

df = pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [100,100,30,40],'CCC' : [100,100,30,-50]}) 

ich auch den Datenrahmen haben:

df1 = pd.DataFrame({'AAA' : [4], 'BBB' : [100]}) 

wo ich

relevantColumns=['AAA','BBB'] 
definieren

das ist nur eine Liste der Spalten, die df1.

Ich möchte den Index finden, für die DF1 in df erscheint. Im Moment habe ich etwas, das wie folgt aussieht,

trueNFalses=(df==df1)[columnsToSort] #This generates a boolean dataframe 

#Now I want to find the row with two trues in it, this is the row where df1 appears. 

numTrues=trueNFalses.sum(axis=1) 

#Now I look through numTrues and find the index of every values of 2, 
#because that is where there were two trues. 

indices=numTrues[numTrues==len(columnsToSort)].axes 

Ich auch, was fühlt sich an wie eine sehr rund um die Berechnung nur auf die Indizes, wo df hat die Spalten hat, die df1 hat. Ich fühle mich albern, all das zu tun, weil ich fast sicher bin, dass es einen besseren Weg gibt, dies in Pandas zu tun. Meine Technik hat auch ein paar Nachteile, die ich gerne beheben würde, weiß aber nicht wie. Zum Beispiel brauche ich wirklich Indizes, um ein Datenrahmen zu sein, aber mit meinem Code ist es eine Liste von dtype-Objekt, das für zukünftige Verarbeitung ungeschickt ist.

Antwort

2

Ich glaube, Sie merge mit reset_index versuchen und dann Indizes Werte sind in Spalte index:

df = pd.DataFrame({'AAA' : [4,5,6,7], 
        'BBB' : [100,100,30,40], 
        'CCC' : [100,100,30,-50]}, index=[2,3,4,5]) 

df1 = pd.DataFrame({'AAA' : [4], 'BBB' : [100]}, index=[8]) 

relevantColumns=['AAA','BBB'] 

print df 
    AAA BBB CCC 
2 4 100 100 
3 5 100 100 
4 6 30 30 
5 7 40 -50 

print df1 
    AAA BBB 
8 4 100 

print pd.merge(df.reset_index(), df1, on=relevantColumns, how='right') 
    index AAA BBB CCC 
0  2 4 100 100 

print pd.merge(df.reset_index(), df1, on=relevantColumns, how='right')['index'] 
0 2 
Name: index, dtype: int64 
+0

Dank das ist genau das, was ich für war lookin !! –