gpt4 book ai didi

python - Pandas groupby : treat two columns as one

转载 作者:行者123 更新时间:2023-11-30 22:01:08 24 4
gpt4 key购买 nike

我有一个数据框,其中两列是纬度和经度。每个经纬度对代表一个位置,我想按该位置进行分组。

我可以通过将两列转换为一列元组来执行此 groupby 操作,然后对该列进行 groupby 操作。然而,我的实际数据框非常大,添加另一列确实会减慢速度。我想知道在 pandas 中是否有更惯用的方法来执行此操作。

In [1]: import pandas as pd                                                                                                                                                                                 
In [2]: import numpy as np
In [3]: key = np.random.randint(low = 1, high = 20, size = 100)
...: data = np.random.random(size = (100))
...: d1 = {'key':key, 'time':range(1,101), 'data':data}
...: df1 = pd.DataFrame(d1)
...: print(df1.shape)
...: df1.head()
(100, 3)
Out[3]:
key time data
0 3 1 0.778231
1 13 2 0.822494
2 4 3 0.053416
3 8 4 0.894341
4 7 5 0.884310
In [4]: key = range(1,21)
...: lat = np.random.randint(low = 0, high = 90, size = 20)
...: lon = np.random.randint(low = 0, high = 90, size = 20)
...: d2 = {'key':key, 'lat':lat, 'lon':lon}
...: df2 = pd.DataFrame(d2)
...: print(df2.shape)
...: df2.head()
(20, 3)
Out[4]:
key lat lon
0 1 36 81
1 2 6 57
2 3 84 4
3 4 61 0
4 5 54 69
In [5]: result = pd.merge(df1, df2).sort_values('time')
...: result.head()
Out[5]:
key time data lat lon
0 3 1 0.778231 84 4
4 13 2 0.822494 12 19
13 4 3 0.053416 61 0
18 8 4 0.894341 49 34
23 7 5 0.884310 8 13

(确保在框中向下滚动以查看 In [5] 的输出,因为这就是我的最终数据框的样子)

此时,我希望能够执行类似于 result.groupby(('lat','lon')) 的操作,并让 pandas 将两列视为一列。有没有办法做到这一点?或者我应该硬着头皮创建一个新的数据元组列?

最佳答案

这不是部分吗

At this point I would like to be able to do something like result.groupby(('lat','lon'))

这正是您正在寻找的答案吗?它将根据您想要的任意数量的列中的唯一值进行分组。

示例数据:

key  time     data  lat  lon
3 1 0.231000 84 4
4 1 0.832310 22 11
5 1 1.210000 84 4
6 1 3.778231 22 11
8 1 15.450000 84 4

如何对这两列中的唯一值进行分组:

import pandas as pd

for name, group in df.groupby(["lat", "lon"]):
print("Group indices: {}".format(name))
print(group)

输出:

Group indices: (22, 11)
key time data lat lon
1 4 1 0.832310 22 11
3 6 1 3.778231 22 11
Group indices: (84, 4)
key time data lat lon
0 3 1 0.231 84 4
2 5 1 1.210 84 4
4 8 1 15.450 84 4

这不是你想要的还是我误解了什么?

关于python - Pandas groupby : treat two columns as one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54138724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com