2017-06-16 4 views
2

Was ist der beste Weg, um den Wert einer Zelle in Bezug auf eine andere Zelle zu erhalten?Python - Pandas Indexing

Ich habe die unten Liste von Kennungen und auch die folgende CSV-Datei (nicht Datenrahmen):

list = ['ABC0123', 'DEF0123'] 

> Column 1 Column 2 Column 3 Column 4 
> "Date" 20170101 "Identifier" ABC
>"OpenPrice" 500  "Currency"  USD 
>"ClosePrice" 550  "foo"   bar 
> ... 
> ... 
> ... 
> "Date" 20170101 "Identifier" DEF
>"OpenPrice" 600  "Currency"  USD 
>"ClosePrice" 650  "foo"   bar 

Ich mag die Nähe Preise für die Kennungen erhalten, zum Beispiel 550 und 650, während der Datei Parsen , nach den Bezeichnern suchen und dann 2 nach unten und 2 nach links bewegen.

"Close Price" wiederholt sich und ich möchte die Werte für eine Liste von Bezeichnern erhalten. Auch iloc und loc erhalten nur die Werte in derselben Zeile. Was ist also der einfachste Weg, um die Werte zu erhalten?

+0

Haben Sie die Möglichkeit, das Format zu ändern? Sie haben eine viel einfachere Zeit, wenn Sie für jede Art von Daten eine Spalte haben: Datum, Bezeichner, OpenPrice, ClosePrice, Currency usw. Dann wird jede Zeile ein vollständiger Datensatz sein. –

+0

erstens danke für die Hilfe mit dem Format meiner Frage, zweitens, leider nicht, ich weiß, was Sie meinen, aber ich arbeite an einer großen Datei, die an mich gesendet wird, anstatt in der Lage, die Ausgabe zu steuern. – bloo

Antwort

1

Lassen Sie uns versuchen:

df.iloc[df[df['Column 4'].isin(list)].index + 2,1] 
+0

nahm mich etwas Zeit, um eine für i-Schleife anzuwenden, anzupassen und zu testen, auf meinem Dataset aber .. YES! Können Sie mir bitte erläutern, wie und warum das funktioniert, oder mich zur Dokumentation führen? nicht sicher, ob dies der richtige ist https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.html, kann aber nicht sagen, dass es viel hilft. – bloo

+0

Okay ... Lassen Sie uns von innen nach außen arbeiten. df ['Spalte 4'] ist in der Liste. gibt für diese zwei Datensätze den Wert true zurück. Wir verwenden dann die boolesche Indexauswahl, um die Datensätze zu erhalten, und .index gibt den Index add 2 zu diesem Index zurück, um in Zeilen zu gehen. Verwenden Sie jetzt .iloc für die Indexposition des Datenrahmens, und rufen Sie die zweite Spalte auf. –

+0

Danke, ich denke, abgesehen von dem Gedanken, die Indexzeile zu bekommen, ist es das Wesentliche Ihrer Lösung, zu wissen, wie Sie sich von dort fortbewegen können. Ich hatte '+ 2, 1' vorher nicht versucht. – bloo