gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:00 25 4
gpt4 key购买 nike

我有一个像这样的数据框

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/

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