簡體   English   中英

Pandas groupby:將兩列視為一列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM