pandas - 使用子 ID 计算列中的唯一值
问题描述
我有一个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
是针对分段,但完整的轨迹可能被不同的模式覆盖(即包含多个分段)。所以前 4 位id
是唯一的轨迹,最后 3 位是具有该轨迹的唯一段。
我知道我可以计算使用中的唯一段数df
:
df.groupby('id').['mode'].nunique()
然后我如何计算唯一轨迹的数量5138, 5145, ...
?
解决方案
使用索引获取前 4 个值str
,如有必要,首先通过 将值转换为字符串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
如果需要在前 4id
秒后处理值:
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()
推荐阅读
- c - 我在 for 循环中使用 if -else 对数组中的奇数求和时遇到问题
- javascript - 从缩略图数组链接到轮播中的特定幻灯片
- field - 新自定义字段的值未显示在正确的位置。联系人模板。奥多 12
- flutter - 在 PageView 颤动中从第一页动画到第三页
- javascript - 转换地图
在 javascript 中转换为 json - flutter - 没有 PageView 的图像轮播
- android-studio - 同时构建两个变体
- flutter - Flutter 为 ScaleTransition 设置自定义限制
- android - 应用更改:清单始终被视为已修改
- javascript - 控制台从现有目录中抛出该模块是:`找不到模块:错误:无法解析'./components/InfoPanel.js/'在`