Spalte zu DataFrame hinzufügen mit anderem Index

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BjoernLaemmerzahl
User
Beiträge: 22
Registriert: Sonntag 17. Mai 2015, 12:22

Hallo,

leider scheine ich das grundlegende Prinzip der Indices bei Pandas DataFrames nicht zu verstehen.

Folgendes Beispiel:

gegeben ist JSON mit folgender Struktur:

Code: Alles auswählen

<Root>
<Results>
<SeriesId>178</SeriesId>
<SamplingTime>0001-01-01T00:00:00Z</SamplingTime>
<DataPoints>
<Start>2016-04-05T00:00:00Z</Start>
<Value>41.69</Value>
</DataPoints>
<DataPoints>
<Start>2016-04-05T01:00:00Z</Start>
<Value>41.69</Value>
</DataPoints>
Ich möchte jeweils die Werte ("Value") je nach "SeriesID" als Spalte in einem DataFrame.

Code: Alles auswählen

js = r.json()
df = json_normalize(js, 'DataPoints',['SeriesId'])

df['P'] = df.groupby('SeriesId').get_group(int(input[0]))['Value']
df['Demand'] = df.groupby('SeriesId').get_group(int(input[1]))['Value']
Erster Teil
Time Value SeriesId P Demand
0 2016-04-05T00:00:00Z 41.69 178 41.69 NaN
1 2016-04-05T01:00:00Z 41.69 178 41.69 NaN
2 2016-04-05T02:00:00Z 41.69 178 41.69 NaN
3 2016-04-05T03:00:00Z 41.69 178 41.69 NaN
4 2016-04-05T04:00:00Z 41.69 178 41.69 NaN
5 2016-04-05T05:00:00Z 41.69 178 41.69 NaN
6 2016-04-05T06:00:00Z 41.78 178 41.78 NaN
7 2016-04-05T07:00:00Z 41.69 178 41.69 NaN
8 2016-04-05T08:00:00Z 34.00 178 34.00 NaN
9 2016-04-05T09:00:00Z 27.47 178 27.47 NaN
10 2016-04-05T10:00:00Z 23.18 178 23.18 NaN
11 2016-04-05T11:00:00Z 22.64 178 22.64 NaN
12 2016-04-05T12:00:00Z 22.64 178 22.64 NaN
13 2016-04-05T13:00:00Z 22.99 178 22.99 NaN
14 2016-04-05T14:00:00Z 31.97 178 31.97 NaN
15 2016-04-05T15:00:00Z 35.01 178 35.01 NaN
16 2016-04-05T16:00:00Z 41.69 178 41.69 NaN
17 2016-04-05T17:00:00Z 42.28 178 42.28 NaN
18 2016-04-05T18:00:00Z 42.28 178 42.28 NaN
19 2016-04-05T19:00:00Z 42.28 178 42.28 NaN
20 2016-04-05T20:00:00Z 41.78 178 41.78 NaN
21 2016-04-05T21:00:00Z 41.69 178 41.69 NaN
22 2016-04-05T22:00:00Z 41.69 178 41.69 NaN
23 2016-04-05T23:00:00Z 34.00 178 34.00 NaN
24 2016-04-06T00:00:00Z 34.00 178 34.00 NaN
25 2016-04-06T01:00:00Z 25.01 178 25.01 NaN
26 2016-04-06T02:00:00Z 25.86 178 25.86 NaN
27 2016-04-06T03:00:00Z 34.00 178 34.00 NaN
28 2016-04-06T04:00:00Z 34.00 178 34.00 NaN
29 2016-04-06T05:00:00Z 41.69 178 41.69 NaN
.. ... ... ... ... ...

Letzter Teil
206 2016-04-08T16:00:00Z 29.58 187 NaN 29.58
207 2016-04-08T17:00:00Z 32.22 187 NaN 32.22
208 2016-04-08T18:00:00Z 31.96 187 NaN 31.96
209 2016-04-08T19:00:00Z 30.66 187 NaN 30.66
210 2016-04-08T20:00:00Z 30.68 187 NaN 30.68
211 2016-04-08T21:00:00Z 29.00 187 NaN 29.00
212 2016-04-08T22:00:00Z 28.45 187 NaN 28.45
213 2016-04-08T23:00:00Z 24.18 187 NaN 24.18
214 2016-04-09T00:00:00Z 23.28 187 NaN 23.28
215 2016-04-09T01:00:00Z 21.84 187 NaN 21.84
216 2016-04-09T02:00:00Z 21.46 187 NaN 21.46
217 2016-04-09T03:00:00Z 21.72 187 NaN 21.72
218 2016-04-09T04:00:00Z 22.42 187 NaN 22.42
219 2016-04-09T05:00:00Z 23.42 187 NaN 23.42
220 2016-04-09T06:00:00Z 27.21 187 NaN 27.21
221 2016-04-09T07:00:00Z 25.12 187 NaN 25.12
222 2016-04-09T08:00:00Z 22.76 187 NaN 22.76
223 2016-04-09T09:00:00Z 22.58 187 NaN 22.58
224 2016-04-09T10:00:00Z 21.83 187 NaN 21.83
225 2016-04-09T11:00:00Z 20.81 187 NaN 20.81
226 2016-04-09T12:00:00Z 19.94 187 NaN 19.94
227 2016-04-09T13:00:00Z 20.35 187 NaN 20.35
228 2016-04-09T14:00:00Z 20.30 187 NaN 20.30
229 2016-04-09T15:00:00Z 22.27 187 NaN 22.27
230 2016-04-09T16:00:00Z 26.91 187 NaN 26.91
231 2016-04-09T17:00:00Z 29.62 187 NaN 29.62
232 2016-04-09T18:00:00Z 31.81 187 NaN 31.81
233 2016-04-09T19:00:00Z 29.56 187 NaN 29.56
234 2016-04-09T20:00:00Z 27.44 187 NaN 27.44
235 2016-04-09T21:00:00Z 24.00 187 NaN 24.00
Wie ihr sehen könnt, werden "P" und "Demand" mit einem unterschiedlichem Index versehen. Daher kann ich sie nicht mehr in einem DataFrame vereinen, sondern lediglich "anhängen".

Wie kann ich es erreichen, das beide den gleichen Index erhalten?


Vielen Dank für eure Hilfe.
Benutzeravatar
noisefloor
User
Beiträge: 4209
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
gegeben ist JSON mit folgender Struktur:
Das ist kein JSON, das ist wenn XML, wobei das, was du gepostet hast, auch kein valides XML ist.

Gruß, noisefloor
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

P und Demand tauchen nicht irgendwie plötzlich und überraschend auf. Du selbst erzeugst P und Demand und hängst sie als unterschiedliche Indize an das DataFrame. Du musst halt P und Demand vereinigen und nach welchen Regeln dass passieren soll musst du schon selbst wissen. Wie man einen Index an das DateFrame hängt weisst du offensichtlich auch. Dir steht hier überhaupt nichts im Weg.
BjoernLaemmerzahl
User
Beiträge: 22
Registriert: Sonntag 17. Mai 2015, 12:22

Hallo,

Danke für eure Antworten.

@noisefloor.

Das hast du natürlich richtig erkannt. Ich habe eine XML-Response statt der JSON-Response eingefügt.



Ich habe das Problem wie folgend gelöst.

Code: Alles auswählen

js = r.json()
df = json_normalize(js, 'DataPoints',['SeriesId'])

P = df.groupby('SeriesId', as_index=False, sort=False, group_keys=False).get_group(int(input[0]))['Value']
Demand = df.groupby('SeriesId', as_index=False, sort=False, group_keys=False).get_group(int(input[1]))['Value']
Demand = Demand.reset_index(drop=True)

df2 = pd.concat([P,Demand, df['Start']], axis=1, join='inner')

with pd.option_context('display.max_rows',999):
    print df2

Code: Alles auswählen

Value  Value                Start
0   41.69  20.00  2016-04-06T00:00:00
1   34.00  19.20  2016-04-06T01:00:00
2   34.00  19.06  2016-04-06T02:00:00
3   25.01  18.95  2016-04-06T03:00:00
4   25.86  19.02  2016-04-06T04:00:00
5   34.00  20.00  2016-04-06T05:00:00
6   34.00  24.33  2016-04-06T06:00:00
7   41.69  32.97  2016-04-06T07:00:00
8   41.69  34.24  2016-04-06T08:00:00
9   38.01  25.98  2016-04-06T09:00:00
10  30.79  23.24  2016-04-06T10:00:00
11  25.50  21.97  2016-04-06T11:00:00
12  24.69  21.25  2016-04-06T12:00:00
13  24.69  20.02  2016-04-06T13:00:00
14  24.69  19.75  2016-04-06T14:00:00
15  24.69  19.85  2016-04-06T15:00:00
16  25.00  20.09  2016-04-06T16:00:00
17  31.50  21.59  2016-04-06T17:00:00
18  41.69  23.10  2016-04-06T18:00:00
19  41.69  26.71  2016-04-06T19:00:00
20  42.28  28.26  2016-04-06T20:00:00
21  41.78  23.23  2016-04-06T21:00:00
22  41.69  21.06  2016-04-06T22:00:00
23  34.00  19.01  2016-04-06T23:00:00
24  30.14  16.42  2016-04-07T00:00:00
25  26.30  16.00  2016-04-07T01:00:00
26  25.15  13.46  2016-04-07T02:00:00
27  25.10  12.57  2016-04-07T03:00:00
28  25.10  13.49  2016-04-07T04:00:00
29  25.15  17.37  2016-04-07T05:00:00
30  32.48  22.62  2016-04-07T06:00:00
31  35.80  28.40  2016-04-07T07:00:00
32  38.01  31.31  2016-04-07T08:00:00
33  33.90  26.33  2016-04-07T09:00:00
34  28.00  21.55  2016-04-07T10:00:00
35  24.13  21.56  2016-04-07T11:00:00
36  24.13  22.32  2016-04-07T12:00:00
37  24.13  21.60  2016-04-07T13:00:00
38  24.13  22.57  2016-04-07T14:00:00
39  25.50  21.86  2016-04-07T15:00:00
40  28.00  21.94  2016-04-07T16:00:00
41  36.00  22.73  2016-04-07T17:00:00
42  41.69  28.59  2016-04-07T18:00:00
43  42.28  31.11  2016-04-07T19:00:00
44  49.03  32.68  2016-04-07T20:00:00
45  42.28  29.41  2016-04-07T21:00:00
46  42.28  28.27  2016-04-07T22:00:00
47  41.69  23.54  2016-04-07T23:00:00
48  41.69  23.39  2016-04-08T00:00:00
49  36.00  21.69  2016-04-08T01:00:00
50  36.00  21.18  2016-04-08T02:00:00
51  29.00  20.52  2016-04-08T03:00:00
52  23.58  21.04  2016-04-08T04:00:00
53  24.09  21.72  2016-04-08T05:00:00
54  32.37  29.12  2016-04-08T06:00:00
55  36.00  35.00  2016-04-08T07:00:00
56  39.48  38.20  2016-04-08T08:00:00
57  36.00  37.55  2016-04-08T09:00:00
58  30.00  34.22  2016-04-08T10:00:00
59  27.00  32.96  2016-04-08T11:00:00
60  23.58  29.74  2016-04-08T12:00:00
61  23.00  27.90  2016-04-08T13:00:00
62  23.58  26.36  2016-04-08T14:00:00
63  23.58  24.66  2016-04-08T15:00:00
64  26.00  23.95  2016-04-08T16:00:00
65  31.50  27.03  2016-04-08T17:00:00
66  40.00  29.58  2016-04-08T18:00:00
67  41.78  32.22  2016-04-08T19:00:00
68  42.28  31.96  2016-04-08T20:00:00
69  42.28  30.66  2016-04-08T21:00:00
70  41.78  30.68  2016-04-08T22:00:00
71  41.69  29.00  2016-04-08T23:00:00
72  41.69  28.45  2016-04-09T00:00:00
73  36.00  24.18  2016-04-09T01:00:00
74  35.01  23.28  2016-04-09T02:00:00
75  31.80  21.84  2016-04-09T03:00:00
76  32.22  21.46  2016-04-09T04:00:00
77  32.66  21.72  2016-04-09T05:00:00
78  35.01  22.42  2016-04-09T06:00:00
79  41.69  23.42  2016-04-09T07:00:00
80  41.69  27.21  2016-04-09T08:00:00
81  41.69  25.12  2016-04-09T09:00:00
82  40.00  22.76  2016-04-09T10:00:00
83  40.00  22.58  2016-04-09T11:00:00
84  36.00  21.83  2016-04-09T12:00:00
85  27.47  20.81  2016-04-09T13:00:00
86  22.95  19.94  2016-04-09T14:00:00
87  22.95  20.35  2016-04-09T15:00:00
88  26.92  20.30  2016-04-09T16:00:00
89  36.00  22.27  2016-04-09T17:00:00
90  40.00  26.91  2016-04-09T18:00:00
91  41.69  29.62  2016-04-09T19:00:00
92  41.78  31.81  2016-04-09T20:00:00
93  41.69  29.56  2016-04-09T21:00:00
94  41.69  27.44  2016-04-09T22:00:00
95  36.00  24.00  2016-04-09T23:00:00
Antworten