2017-01-04 13 views
1

私はPythonで2つのデータフレームを持っています。 1番目は1日の生の降水量データで、2番目のデータはgroup.byを使用した1日降水量の合計です。1つのデータフレームの列をPythonのグループ化データフレームに追加

1つのデータフレームは、この(device_idsの間でより多くの行を持つ)のようになります。

>>> df1 
          device_id  rain day month year 
0  9z849362-b05d-4317-96f5-f267c1adf8d6 0.0 31  12 2016 
1  9z849362-b05d-4317-96f5-f267c1adf8d6 0.0 31  12 2016 
6  e7z581f0-2693-42ad-9896-0048550ccda7 0.0 31  12 2016 
11 e7z581f0-2693-42ad-9896-0048550ccda7 0.0 31  12 2016 
12 ceez972b-135f-45b3-be4w-7c23102676bq 0.2 31  12 2016 
13 ceez972b-135f-45b3-be4w-7c23102676bq 0.0 31  12 2016 
18 ceez972b-135f-45b3-be4w-7c23102676bq 0.0 31  12 2016 
19 1d28dz3a-c923-4967-a7bb-5881d232c9a7 0.0 31  12 2016 
24 1d28dz3a-c923-4967-a7bb-5881d232c9a7 0.0 31  12 2016 
25 a044ag4f-fd7c-4ae4-bff3-9158cebad3b1 0.0 31  12 2016 
29 a044ag4f-fd7c-4ae4-bff3-9158cebad3b1 0.0 31  12 2016 
29 a044ag4f-fd7c-4ae4-bff3-9158cebad3b1 0.0 31  12 2016 
...         ... ... ... ... ... 
3903 9z849362-b05d-4317-96f5-f267c1adf8d6 0.0 31  12 2016 
3904 9z849362-b05d-4317-96f5-f267c1adf8d6 0.0 31  12 2016 
3905 9z849362-b05d-4317-96f5-f267c1adf8d6 0.0 31  12 2016 

、他方は、このようなものになります。私は使用して得た

>>> df2 
             rain 
device_id 
1d28dz3a-c923-4967-a7bb-5881d232c9a7 0.0 
9z849362-b05d-4317-96f5-f267c1adf8d6 0.0 
a044ag4f-fd7c-4ae4-bff3-9158cebad3b1 1.2 
ceez972b-135f-45b3-be4w-7c23102676bq 2.2 
e7z581f0-2693-42ad-9896-0048550ccda7 0.2 

を... :

df2 = df1.groupby(['device_id'])[["rain"]].sum() 

私は私の最後のデータフレームは次のようになりたい:

>>> df3 
            rain  day month year 
device_id 
1d28dz3a-c923-4967-a7bb-5881d232c9a7 0.0 31 12  2016 
9z849362-b05d-4317-96f5-f267c1adf8d6 0.0 31 12  2016 
a044ag4f-fd7c-4ae4-bff3-9158cebad3b1 1.2 31 12  2016 
ceez972b-135f-45b3-be4w-7c23102676bq 2.2 31 12  2016 
e7z581f0-2693-42ad-9896-0048550ccda7 0.2 31 12  2016 

つまり、df1の "day month year"カラムをdf2に追加したいとします。 mergeappendなどを使用する必要があるかどうかはわかりません。

答えて

1

これはうまくいくのでしょうか? groupby日と月も同様です。

df.groupby(['device_id', 'day', 'month', 'year']).sum() 
                rain 
device_id       day month year  
1d28dz3a-c923-4967-a7bb-5881d232c9a7 31 12 2016 0.0 
9z849362-b05d-4317-96f5-f267c1adf8d6 31 12 2016 0.0 
a044ag4f-fd7c-4ae4-bff3-9158cebad3b1 31 12 2016 0.0 
ceez972b-135f-45b3-be4w-7c23102676bq 31 12 2016 0.2 
e7z581f0-2693-42ad-9896-0048550ccda7 31 12 2016 0.0 

それとも

df.groupby(['device_id', 'day', 'month', 'year']).sum().reset_index() 

0 1d28dz3a-c923-4967-a7bb-5881d232c9a7 31  12 2016 0.0 
1 9z849362-b05d-4317-96f5-f267c1adf8d6 31  12 2016 0.0 
2 a044ag4f-fd7c-4ae4-bff3-9158cebad3b1 31  12 2016 0.0 
3 ceez972b-135f-45b3-be4w-7c23102676bq 31  12 2016 0.2 
4 e7z581f0-2693-42ad-9896-0048550ccda7 31  12 2016 0.0 

か正確にあなたのインデックス/列構造を一致させる必要があり、次のようなデータフレームにこれらの列を返すようにreset_indexを追加することができます。

df.groupby(['device_id', 'day', 'month', 'year']).sum().reset_index([1, 2, 3]) 
+1

このshoudlはトリックを行う! df.groupby(['device_id'、 'day'、 'month'、 'year']、as_index = False).sum() ' – MaxU

+0

の代わりに" as_index = False "を使用することもできます。ああ、 'as_index = False'。私は2週間前にそれを使用しましたが、それを忘れました。念押し有難う。 – lmo

+0

ありがとう@lmoと@MaxU! – JAG2024

関連する問題