Pandas 使用子id计算列中的唯一值
我有一个Pandas 使用子id计算列中的唯一值,pandas,dataframe,unique,Pandas,Dataframe,Unique,我有一个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
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()
然后,如何计算唯一轨迹的数量
51385145,…
?使用索引获取具有str
的前4个值,如有必要,首先通过以下方式将值转换为字符串:
如果需要处理前4个id
s之后的值:
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()
df.groupby(df['id'].apply(lambda x: str(x)[:4]))['mode'].nunique()