У меня есть датафрейм, два столбца - широта и долгота. Каждая лат-лон-пара представляет одно местоположение, и я хотел бы сгруппировать это местоположение.
Я мог бы выполнить эту групповую операцию, преобразовав два столбца в один столбец кортежей и сгруппировав этот столбец. Тем не менее, мой фактический фрейм данных очень большой, и добавление еще одного столбца может реально замедлить процесс. Я хотел бы знать, есть ли более идиоматический способ сделать это в пандах.
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'))
, и чтобы панды рассматривали оба столбца как один. Есть ли способ сделать это? Или я должен просто прикусить пулю и создать новый столбец кортежей данных?