[英]Pandas groupby: treat two columns as one
我有一個數據幀,其中兩列是緯度和經度。 每個lat-lon對代表一個位置,我想分組到那個位置。
我可以通過將兩列轉換為單列的元組來進行此組操作,並將該列轉換為group by。 但是,我的實際數據幀非常大,添加另一列可能會減慢速度。 我想知道在熊貓中是否有更慣用的方式來做這件事。
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將兩個列視為一個。 有沒有辦法做到這一點? 或者我應該咬緊牙關並制作新的數據元組列?
不是那個部分
在這一點上,我希望能夠做像
result.groupby(('lat','lon'))
類的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
這不是你想要的或者我誤解了什么嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.