我有一个 Dataframe ,看起来像这样:
import pandas as pd
df = pd.DataFrame({'id': [1,1,1,1,1,2,2,2,2], 'time': [1,2,3,4,5,4,7,8,9], 'taken': [0,1,1,0,1,0,1,0,1]})
此df
已经是关于id
和time
的订单。
我想只保留taken
具有1
乘id
的值的行,并且如果在列taken
中有两个(或更多)结果1
,则只保留其中的第一个。
我的输出df
应该是这样的:
id time taken
1 1 2 1
4 1 5 1
6 2 7 1
8 2 9 1
- 第二个示例**
为了让问题更清楚一点,如果 Dataframe 如下所示:
df = pd.DataFrame({'id': [1,1,1,1,1,2,2,2,2], 'time': [1,2,3,4,5,4,7,8,9], 'taken': [0,1,1,1,1,1,1,0,1]})
然后输出 Dataframe 应如下所示:
id time taken
1 1 2 1
5 2 4 1
8 2 9 1
有什么办法吗?
4条答案
按热度按时间enxuqcxy1#
通过按
id
分组创建布尔掩码,然后取taken
为True但其移位值不为True的值。0mkxixxg2#
这里有一个方法:
其中:
只有当
taken
中的下一个值不是1时,我们才有True
,因此通过与&
组合,我们可以在两个条件都是True
时进行索引。s6fujrry3#
您可以使用多个掩码来执行此操作。首先检查取值为1的位置。然后您需要检查以下任一项:仍然是相同的id,并且与前一行的差异不是0或不是相同的想法:
h5qlskok4#
以下是一个选项:
输出: