我有一个包含用户子轨迹(段)的df,0,1,2...指示的旅行方式如下:
df = pd.read_csv('sample.csv')
df
id lat lon mode
0 5138001 41.144540 -8.562926 0
1 5138001 41.144538 -8.562917 0
2 5138001 41.143689 -8.563012 0
3 5138003 43.131562 -8.601273 1
4 5138003 43.132107 -8.598124 1
5 5145001 37.092095 -8.205070 0
6 5145001 37.092180 -8.204872 0
7 5145015 39.289341 -8.023454 2
8 5145015 39.197432 -8.532761 2
9 5145015 39.198361 -8.375641 2在上面的示例中,id是针对段的,但是一个完整的轨迹可能被不同的模式所覆盖(即包含多个段)。所以id的前4位数是唯一的轨迹,最后的3位数是唯一的轨迹段。
我知道我可以使用以下方法来计算df中的唯一段数:
df.groupby('id').['mode'].nunique()那么,我如何计算唯一轨迹的数量5138, 5145, ...
发布于 2021-03-12 12:24:56
使用str索引获取前4个值,如果有必要,首先通过Series.astype将值转换为字符串
df = df.groupby(df['id'].astype(str).str[:4])['mode'].nunique().reset_index(name='count')
print (df)
id count
0 5138 2
1 5145 2如果需要在前4个ids之后处理值:
s = df['id'].astype(str)
df = s.str[4:].groupby(s.str[:4]).nunique().reset_index(name='count')
print (df)
id count
0 5138 2
1 5145 2另一个想法是使用lambda函数:
df.groupby(df['id'].apply(lambda x: str(x)[:4]))['mode'].nunique()https://stackoverflow.com/questions/66599881
复制相似问题