Python 从pandas.core.groupby.generic.DataFrameGroupBy对象获取值

Python 从pandas.core.groupby.generic.DataFrameGroupBy对象获取值,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,嗨,我有这样的数据帧,time列中有71个唯一值,lat列中有721个唯一值,lon列中有1440个唯一值,temp列中的所有值都是唯一的 数据帧示例: time latitude longitude temp 1950-01-01 90.0 0.00 49654.792969 1950-01-01 90.0 0.25 49654.792969 . .

嗨,我有这样的数据帧,
time
列中有71个唯一值,
lat
列中有721个唯一值,
lon
列中有1440个唯一值,temp列中的所有值都是唯一的

数据帧示例:

  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行(721 lat*1440 lon)
,所以我这样做

df=df.groupby(['纬度','经度])


现在,由于它是pandas.core.groupby.generic.DataFrameGroupBy对象,我无法从中访问值。因此,我试图通过
df.apply(pd.dataframe)
将其转换为数据帧,但这需要花费大量时间,而且我的内核正在崩溃。那么有没有其他方法来获取记录,或者我在这里做错了什么。如果可能,请建议其他方法。

这应该适合您:

df.groupby(['latitude','longitude'])。聚合(lambda x:','。连接(map(str,x)))

这应该适合您:

df.groupby(['latitude','longitude'])。聚合(lambda x:','。连接(map(str,x)))

对象类型
pandas.core.groupby.generic.DataFrameGroupBy
是一个元组列表,其中第一个元素是groupby元素,第二个元素是该组的dataframe

请参见下面的示例:

创建测试数据帧 测试数据帧 分组数据帧 重要的 正如@HenriChab所评论的,使用
aggregate
或例如
sum
将返回数据帧类型,而不是组类型

>>> 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

对象类型pandas.core.groupby.generic.DataFrameGroupBy是一个元组列表,其中第一个元素是groupby元素,第二个元素是该组的数据帧

请参见下面的示例:

创建测试数据帧 测试数据帧 分组数据帧 重要的 正如@HenriChab所评论的,使用
aggregate
或例如
sum
将返回数据帧类型,而不是组类型

>>> 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

Pandas
groupby()
指令必须附带
aggregate()
指令。您希望输出中的第三列是什么?temps逗号分隔?@HenriChab yes我想要所有带有lat-lon pairPandas的temp值
groupby()
指令必须带有
aggregate()
指令。您希望输出中的第三列是什么?temps逗号分隔?@HenriChab yess我想要所有的temp值和lat-lon Pairey它工作得很好,但顺序有点混乱,就像我预期的第一个纬度和经度是90.0和0.00,但它是-90.0和0.00。这是最后一个纬度,是否有可能获得与原始数据帧中相同顺序的数据对?嘿,我使用了sort=False,它按预期工作。谢谢你的回答。我接受了。:)嘿,它工作得很好,但顺序有点混乱,就像我预期第一纬度和经度是90.0和0.00,但它会变成-90.0和0.00。这是最后一个纬度,是否有可能获得与原始数据帧中相同顺序的数据对?嘿,我使用了sort=False,它按预期工作。谢谢你的回答。我接受了。:)嘿,非常感谢您提供详细的答案!:)嘿,非常感谢您提供详细的答案!:)
>>> 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