__deets__ hat geschrieben: ↑Dienstag 25. Juni 2019, 16:47
Doch, ein dictionary sollte da das Mittel der Wahl sein. Denn nur so kannst du deinen lookup von O(n) auf O(1) reduzieren. Zeig mal wie du das einliest. Oder sind die beiden Dataframes gleich, und es geht dir nur um subsequente Eintraege ohne NaN? Dann geht das noch anders.
Aber ein dictionary kann nur über "key" iterieren. Und ich habe 60 Geräte, deren Name ich nicht überall mitschleppen möchte..?
Das erste df lese ich mittel pd.read_csv() ein und das zweite ist die Ableitung des anderen.
__blackjack__ hat geschrieben: ↑Dienstag 25. Juni 2019, 17:22
@Progressive: Also ich verstehe die Problemstellung nicht. Kannst Du das mal mit einem Beispiel machen, also Daten für beide DataFrames und was dann da als Ergebnis heraus kommen soll als DataFrame und warum/nach welchen Kriterien.
df2:
1 nan nan nan
2 0.00010210251852879604 0.0002834403248613282 2.288389780280911e-05
3 0.0013591085246769524 0.0010369422445753451 0.00011443615609185026
4 0.0011249694159122664 0.0010034914194550215 8.97855480435153e-05
5 0.0009577152903104819 0.0010334171576232565 nan
6 0.0009066640310461116 0.0008855385099498791 nan
7 0.0008027864687328856 0.0009805991881133291 nan
8 0.0006108984021605812 0.0006566828648440215 0.0005545720127763248
9 0.0005897728810644043 0.0008379956705598379 nan
10 0.000575689200333615 0.0007570186731272743 0.001779877236971851
11 0.0005545553456985236 0.0009348313925076901 0.001496436912110495
12 0.0004559779141218856 0.0007182927178870369 0.0013256576995565872
13 0.0004806118550924193 nan 0.0012974986716339024
14 0.0004119601616839885 nan 0.0011918793996918628
15 0.00045421120387637015 nan 0.0010703930696957173
16 0.0004278105526602932 nan 0.0008591295251949502
17 0.0004577279572896137 nan 0.0006707498784970095
18 0.00032745807729923915 nan 0.0004911871159488587
df1
1 1043394,1 2369745,9 334376,1
2 1044619,3 2366344,7 334101,5
3 1028310,4 2353901,7 332728,3
4 1014811,1 2341860,1 331650,9
5 1003318,8 2329459,4 95741,2
6 992439,1 2318833,2 308645,1
7 982805,9 2307066,3 527041,8
8 975475,3 2299186,3 520387,1
9 968398,2 2289130,6 494233,7
10 961490,1 2280046,6 472875,7
11 954835,6 2268828,9 454918,9
12 949364 2260209,6 439011,4
13 943596,8 135985,4 423441,8
14 938653,4 2449305 409139,6
15 933203 3656065 396295,2
16 928069,4 3531592,6 385985,9
17 922576,8 3339032,5 377937,1
18 918647,4 3199117,3 372043
D.h., ausgehend von df2, wo ich mir angucke, wo 5 Zeilen in einer Folge einer Spalte jeweils ohne NaN auftreten, suche ich zwei solcher Ereignisse und benutze mit diesen Indizes die korrespondierenden Werte in df1.
D.h., z.B. wären die Zeilen 2-6 der ersten Spalte von df2 interessant und würde daher dieselben Zeilen 2-6 der ersten Spalte von df1 benutzen und als Objekt speichern.
Vermutlich geht auch das eleganter aber mir wäre schon geholfen, wenn ich nicht solange durch die dfs iterieren müsste.
snafu hat geschrieben: ↑Dienstag 25. Juni 2019, 18:09
Progressive hat geschrieben: ↑Dienstag 25. Juni 2019, 16:39
Hatte es ursprünglich mit einem dictionary versucht, aber da kann man nicht mal iterieren..
Doch, das kann man. Über die Schlüssel mit der keys()-Method und über die Werte mittels values(). Für die Schlüssel kann man den Aufruf von keys() auch weglassen und direkt über das Dictionary iterieren. Dann werden standardmäßig die Schlüssel benutzt. Bist du vielleicht darüber gestolpert...?
Die keys sind in meinem Fall "101, 102, 103,.. 161". Soweit ich das sehe, kann man mit solchen keys nicht vernünftig drüber iterieren und v.a. nicht gezielt ein- und auslesen. Wenn ich beispielsweise durch die dfs iteriere, wo jede Spalte ein Gerät "101 - 161" repräsentiert, ist das m.E.n. äußerst umständlich mit einem dictionary.