2017-08-29 1 views
1

Ich habe zwei Datenrahmen, die Aktienkurse über Zeit und lagerbezogene Informationen im Laufe der Zeit darstellen (z. B. grundlegende Daten über das Unternehmen).Filterelemente von 2 Pandas Datenrahmen

Beide Datenrahmen enthalten monatliche Daten, die jedoch unterschiedlichen Zeiträumen entsprechen. Eins ist 5 Jahre, das andere ist 10 Jahre. Auch haben beide nicht die gleiche Anzahl an Aktien, es gibt nur eine 80% ige Überschneidung.

Unten ist ein Beispiel des Datenrahmen:

Tage1 = pd.date_range (Start = '1/1/1980', end = '7/1/1980, freq = 'M')

df1 = pd.DataFrame (np.random.randn (6, 4), Spalten = list ('ABCD'), index = Tage1)

days2 = pd.date_range (Start = '1/1/1980 ', Ende =' 5/1/1980 ', freq =' M ')

df2 = pd.DataFrame (np.random.randn (4, 6), Spalten = Liste (' ABCDEF '), index = Tage2)

Mein Ziel ist es, beide Datenrahmen auf das innere Gelenk zu reduzieren. Das heißt, beide decken den gleichen Zeitraum ab und enthalten die gleichen Bestände. Mein Index enthält die Daten und die Spaltennamen sind die Bestandsnamen.

Ich habe mehrere Variationen von merge() usw. ausprobiert, aber diese erstellen einen zusammengeführten Datenrahmen neu, ich möchte beide Datenrahmen behalten. Ich habe auch versucht, isin(), aber ich habe Probleme mit dem Zugriff auf den Index jedes Datenrahmens. Zum Beispiel:.

df3 = df1 [df1.isin (DF2)] dropna()

Hat jemand irgendwelche Vorschläge?

+2

Bitte senden Sie Beispiele für Ihren Code. – James

Antwort

1

für die Spalte Kreuzung:

column_intersection = df1.columns & df2.columns 

für den Zeilenschnitt:

row_intersection = df1.index & df2.index 

dann Teilmenge nur jeden Datenrahmen:

df1 = df1.loc[row_intersection, column_intersection] 
df2 = df2.loc[row_intersection, column_intersection] 
+0

Vielen Dank. Das ist unglaublich einfach und schön, ich habe ein paar Stunden damit verbracht es herauszufinden !! –