Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按列按组统计不同的连续行_Python_Python 3.x_Pandas - Fatal编程技术网

Python 按列按组统计不同的连续行

Python 按列按组统计不同的连续行,python,python-3.x,pandas,Python,Python 3.x,Pandas,我试图对每个客户的不同连续行数求和 所以我的数据看起来像这个虚拟的: 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','

我试图对每个客户的不同连续行数求和

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

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
我想按客户统计不连续的不同行数(根据Lat和Lon)。因此,在本例中,即使只有3对不同的Lat和Lon,两个客户都将返回4

这:

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

但我似乎做不到

df[['Lat','Lon']] != df[['Lat','Lon']] 
它给出:

ValueError: Wrong number of items passed 2, placement implies 1 
或按客户分组。有人能帮忙吗

df.groupby('Customer')[['Lat', 'Lon']].apply(lambda s: s.diff().ne(0).all(1).sum())

Customer
A    4
B    4
dtype: int64
IIUC


我正在使用
shift
创建一个新键,然后使用
删除重复项

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

我正在使用
shift
创建一个新键,然后使用
删除重复项

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

@adhg
all
表示与它相等的所有行@WeNYoBen@adhg
all
表示所有等于Truegot it@WeNYoBen的行