gpt4 book ai didi

python - 如何选择在 pandas 中使用 groupby 第一次出现值的行,以及随后出现的第一个值

转载 作者:行者123 更新时间:2023-12-03 22:37:29 32 4
gpt4 key购买 nike

我有一个如下所示的数据框:

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 已经是关于 idtime 的顺序。

我只想保留 takenid 值为 1 的行,如果有两个(或更多)结果1列中的 taken 仅保留其中的第一个。

我的输出 df 应该是这样的:

  id  time  taken
1 1 2 1
4 1 5 1
6 2 7 1
8 2 9 1

第二个例子

为了让问题更清楚一点,如果数据框看起来像这样:

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]})

那么输出数据框应该是这样的:

   id  time  taken
1 1 2 1
5 2 4 1
8 2 9 1

关于如何做到这一点有什么想法吗?

最佳答案

通过按 id 分组创建 bool 掩码,然后取 taken 为 True 但其移位值不为 True 的值。

df1 = 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]})
df2 = 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]})

df = df1 # First example.
>>> df[df.groupby('id')['taken'].shift().ne(True) & df['taken']]
id time taken
1 1 2 1
4 1 5 1
6 2 7 1
8 2 9 1

df = df2 # Second example.
>>> df[df.groupby('id')['taken'].shift().ne(True) & df['taken']]
id time taken
1 1 2 1
5 2 4 1
8 2 9 1

关于python - 如何选择在 pandas 中使用 groupby 第一次出现值的行,以及随后出现的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60251666/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com