python - 删除满足列值条件的 pandas 数据帧的初始行,同时保持列中的序列值不变
问题描述
dt = {'id': [120,120,120,120,121,121,121], 'day': [0, 1,2,3,0,1,2], 'value': [[0.5,3.4,2.7],[0.45,3.4,0.7],[0.25,0.4,0.7],[0.15,0.34,0.17],[0.35,3.4,2.7],[0.5,3.44,2.57],[0.5,0.34,0.37]]}
df = pd.DataFrame(data=dt)
day id value
0 0 120 [0.5, 3.4, 2.7]
1 1 120 [0.45, 3.4, 0.7]
2 2 120 [0.25, 0.4, 0.7]
3 3 120 [0.15, 0.34, 0.17]
4 0 121 [0.35, 3.4, 2.7]
5 1 121 [0.5, 3.44, 2.57]
6 2 121 [0.5, 0.34, 0.37]
我有一个pandas dataframe
. 我希望序列column "day"
的最大值不超过 1。对于column day
高于 1 的值,我想删除它的初始行,然后将序列重置为 [0-1]
也就是说,在这种情况下,column"id"=120
有列“day”两个额外的值 2 和 3。在这种情况下,我想删除它们的前两行,然后将 day 的列值替换为 (0,1)。
结果:
day id value
0 0 120 [0.25, 0.4, 0.7]
1 1 120 [0.15, 0.34, 0.17]
2 0 121 [0.5, 3.44, 2.57]
3 1 121 [0.5, 0.34, 0.37]
解决方案
您可以使用groupby
with tail
,然后我们会cumcount
重新创建一天
df.groupby('id').tail(2).assign(day=lambda x : x.groupby('id').cumcount())
Out[221]:
day id value
2 0 120 [0.25, 0.4, 0.7]
3 1 120 [0.15, 0.34, 0.17]
5 0 121 [0.5, 3.44, 2.57]
6 1 121 [0.5, 0.34, 0.37]
推荐阅读
- django - 在 django 中验证 url 中的日期的最佳实践?
- python - 如何返回给定 N*N 方阵的对角线或对角线数组
- function - 使用海关间隔研究功能误差
- html - 如何更改输入按钮(方形)的默认外观,使其看起来像三个垂直点?
- php - 我总是得到一个响应'mysqli_stmt object is not fully initialized'作为下面代码的输出
- css - 进行 3d 旋转时,Chrome 无法使顶部元素不可见而底部元素可见(firefox 有效)
- angular - 反应式表单中的角度表单组与表单控件和表单构建器
- reactjs - 在另一个组件中渲染一个组件
- javascript - 如何使用 DOMImplementation.createHTMLDocument() 将 JavaScript 添加到新创建的文档中
- java - 获取微调器选定项目并传递数据