Skip to main content
 首页 » 编程设计

python之按列分组统计不同的连续行

2025年05月04日18jackei

我正在尝试对每个客户的不同连续行数求和。

所以我的数据看起来像这个虚拟数据:

df = pd.DataFrame({'Customer':['A','A','A','A','A','A','A','A', 'B','B','B','B','B','B','B','B'], 
                   'Time':['00:00','01:00','02:00','03:00','04:00', '05:00','06:00','07:00','00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00'], 
                   'Lat':[20,20,30,30,30,40,20,20,20,20,30,30,30, 40,20,20],  
                   'Lon':[40,40,50,50,50,60,40,40,40,40,50,50,50,60,40,40]}) 
 
 
     Customer    Time    Lat  Lon 
0      A         00:00   20   40 
1      A         01:00   20   40 
2      A         02:00   30   50  
3      A         03:00   30   50 
4      A         04:00   30   50 
5      A         05:00   40   60 
6      A         06:00   20   40 
7      A         07:00   20   40 
8      B         00:00   20   40 
9      B         01:00   20   40 
10     B         02:00   30   50 
11     B         03:00   30   50 
12     B         04:00   30   50 
13     B         05:00   40   60 
14     B         06:00   20   40 
15     B         07:00   20   40 

我想计算客户不连续的不同行数(根据纬度和经度)。因此,在示例中,即使只有 3 对不同的 Lat 和 Lon,它也会为两个客户返回 4。

这个:

test = (df['Lat'] != df['Lat'].shift(1)).values.sum() 

只处理一列,不按客户分组。

但我好像做不到

df[['Lat','Lon']] != df[['Lat','Lon']]  

它给出:

ValueError: Wrong number of items passed 2, placement implies 1  

或按客户分组。有人可以帮忙吗?

请您参考如下方法:

我正在使用 shift 创建一个新 key ,然后使用 drop_duplicates

df['key']=df.groupby('Customer').apply(lambda x : x[['Lat','Lon']].ne(x[['Lat','Lon']].shift()).all(1).cumsum()).reset_index(level=0,drop=True) 
df.drop_duplicates(['Customer','key']) 
   Customer   Time  Lat  Lon  key 
0         A  00:00   20   40    1 
2         A  02:00   30   50    2 
5         A  05:00   40   60    3 
6         A  06:00   20   40    4 
8         B  00:00   20   40    1 
10        B  02:00   30   50    2 
13        B  05:00   40   60    3 
14        B  06:00   20   40    4