簡體   English   中英

從 pandas.core.groupby.generic.DataFrameGroupBy object 獲取值

[英]Get values from pandas.core.groupby.generic.DataFrameGroupBy object

嗨所以我有這樣的 dataframe,它在time列中有 71 個唯一值,在lat列中有 721 個唯一值,在lon列中有 1440 個唯一值,並且在 temp 列中的所有值都是唯一的。

Dataframe 樣品:

  time        latitude  longitude       temp
1950-01-01      90.0     0.00         49654.792969
1950-01-01      90.0     0.25         49654.792969
   .              .       .                .
   .              .       .                .
73715040 rows * 4 cloumn

現在我想使用latlon列進行分組,以獲取所有時間段內所有網格或對的所有 temp 值,這些網格或對將具有1038240 rows(721 lat*1440 lon) ,所以我這樣做。

df = df.groupby(['latitude', 'longitude'])

現在因為它是pandas.core.groupby.generic.DataFrameGroupBy object我無法從中訪問值。 所以我試圖通過df.apply(pd.DataFrame)將它轉換為 dataframe 但這需要很多時間,而且我的 kernel 正在崩潰。 那么有沒有其他方法可以獲取記錄,或者我在這里做錯了什么。 如果可能,請建議替代方式。

object 類型pandas.core.groupby.generic.DataFrameGroupBy是一個元組列表,其中第一個元素是 groupby 元素,第二個元素是該組的 Z6A8064B5DF479455500553C47C5505。

請參見下面的示例:

創建測試 dataframe

import pandas as pd

df = pd.DataFrame({"ColA": [1,1,1,2,2,3,3,3], "ColB": [5,5,6,7,7,8,8,9], "ColC": [1,2,3,4,5,6,7,8]})

測試 dataframe

>>> df
   ColA  ColB  ColC
0     1     5     1
1     1     5     2
2     1     6     3
3     2     7     4
4     2     7     5
5     3     8     6
6     3     8     7
7     3     9     8

分組 dataframe

>>> groups = df.groupby(["ColA", "ColB"])

>>> type(groups)
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>

顯示結果

>>> for group in groups:
...     g, value = group
...     print(f"Key = {g}")
...     print(value)
...     print(80*"-")
...
Key = (1, 5)
   ColA  ColB  ColC
0     1     5     1
1     1     5     2
--------------------------------------------------------------------------------
Key = (1, 6)
   ColA  ColB  ColC
2     1     6     3
--------------------------------------------------------------------------------
Key = (2, 7)
   ColA  ColB  ColC
3     2     7     4
4     2     7     5
--------------------------------------------------------------------------------
Key = (3, 8)
   ColA  ColB  ColC
5     3     8     6
6     3     8     7
--------------------------------------------------------------------------------

重要的

正如@HenriChab 所評論的那樣,使用aggregate或例如sum將返回 dataframe 類型而不是組類型

>>> new_df = df.groupby(["ColA", "ColB"]).sum()
>>> new_df
           ColC
ColA ColB
1    5        3
     6        3
2    7        9
3    8       13
     9        8

最后,您可以重置索引。

>>> new_df.reset_index(inplace=True)

>>> new_df
   ColA  ColB  ColC
0     1     5     3
1     1     6     3
2     2     7     9
3     3     8    13
4     3     9     8

這應該適合你:

df.groupby(['latitude', 'longitude']).aggregate(lambda x: ','.join(map(str, x)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM