Python数据框,删除特定记录之后的所有内容

标签 python pandas dataframe

我有一个像这样的数据框

import pandas as pd

df = pd.DataFrame({'id' : [1, 1, 1, 1, 2, 2, 2, 3, 3, 3], \
                   'counter' : [1, 2, 3, 4, 1, 2, 3, 1, 2, 3], \
                   'status':['a', 'b', 'b' ,'c', 'a', 'a', 'a', 'a', 'a', 'b'], \
                   'additional_data' : [12,35,13,523,6,12,6,1,46,236]}, \
                  columns=['id', 'counter', 'status', 'additional_data'])

df
Out[37]:  
    id  counter status  additional_data
0   1        1      a               12
1   1        2      b               35
2   1        3      b               13
3   1        4      c              523
4   2        1      a                6
5   2        2      a               12
6   2        3      a                6
7   3        1      a                1
8   3        2      a               46
9   3        3      b              236

id 列指示哪些数据属于一起,counter 指示行的顺序,status 是特殊的状态代码。我想删除第一次出现带有 status='b' 的行后的所有行,保留带有 status='b' 的第一行。

最终输出应如下所示

   id  counter status  additional_data
0   1        1      a               12
1   1        2      b               35
4   2        1      a                6
5   2        2      a               12
6   2        3      a                6
7   3        1      a                1
8   3        2      a               46
9   3        3      b              236

一如既往,我们非常感谢所有帮助。

最佳答案

使用 idxmax 的自定义函数对于按条件返回值的索引,请添加 1 表示未丢失 b 行:

def f(x):
    m = x['status'].eq('b')
    b = m.idxmax()
    if m.any():
        x = x.loc[:b]
    else:
        x
    return x


a = df.groupby('id', group_keys=False).apply(f)
print (a)
   id  counter status  additional_data
0   1        1      a               12
1   1        2      b               35
4   2        1      a                6
5   2        2      a               12
6   2        3      a                6
7   3        1      a                1
8   3        2      a               46
9   3        3      b              236

关于Python数据框,删除特定记录之后的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46769786/

相关文章:

python - 如何在 (Python) Google App Engine 数据源上正确执行一对多联接?

python - Pandas 范围日期极度减慢功能

python - Pandas groupby 应用如何加速

python - 是否可以使用pandas中的groupby来执行applymap?

regex - 如何使用 Pandas 拆分数据框?

Python:为什么我得到不同的排序结果

python - tensorflow.keras.dataset.mnist.load_data() 返回内容的说明

Python类和实例属性混淆

python - 计算 DataFrame 的行平均值并向上取整

r - 将数据合并到现有列中