【发布时间】:2015-02-17 19:02:40
【问题描述】:
我正在尝试根据更改列删除表中的一些行。
id subindex change
A1 1 0
A1 2 1
A1 3 12
A1 4 0
A1 5 15
A1 6 1
A2 1 0
A2 2 11
A2 3 1
A2 4 0
在一个子组中(Id 相同)当变化大于 10 时,我想删除后续行。所以表格是:
id subindex change
A1 1 0
A1 2 1
A2 1 0
我所做的是一个 groupby 来确定子表应该被剪切的位置:
df['cut_position']=df[df.change >= 10].groupby('id')['subindex'].transform(lambda x: x.min())
给出:
id subindex change cut_position
A1 1 0 0
A1 2 1 0
A1 3 12 3
A1 4 0 0
A1 5 15 0
A1 6 1 0
A2 1 0 0
A2 2 11 2
A2 3 1 0
A2 4 0 0
那么 groupby('id') 应该很容易做到,但我在尝试获取该表时遇到问题:
id subindex change cut_position
A1 1 0 0
A1 2 1 0
A1 3 12 ToRemove_3
A1 4 0 ToRemove_0
A1 5 15 ToRemove_0
A1 6 1 ToRemove_0
A2 1 0 0
A2 2 11 ToRemove_2
A2 3 1 ToRemove_0
A2 4 0 ToRemove_0
在编写可以生成表格的代码时,我得到:
df.groupby('id')[df['subindex'] >= df['cut_position'].max()].map(lambda x : 'ToRemove_' + x)
KeyError: '未找到列:假,真'
注意:我做了一些有效的事情,但是花费了太多时间......
【问题讨论】:
-
变化 10 表示从这一点及以下的数据质量有所减弱。因此,我想删除更改为 10 或更多的数据以下的所有数据。
-
谢谢萨拉。再次查看您的问题后,我删除了我的评论