[英]Remove empty dataframe from pandas.core.groupby.generic.DataFrameGroupBy
[英]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
現在我想使用lat
和lon
列進行分組,以獲取所有時間段內所有網格或對的所有 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。
請參見下面的示例:
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]})
>>> 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
>>> 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.