gpt4 book ai didi

python - 使用 pandas 选择数据框中两个特定字符串之间的所有行

转载 作者:行者123 更新时间:2023-12-03 08:27:01 24 4
gpt4 key购买 nike

必须具备:

我有一个大型排序数据框,并根据某些逻辑创建了一个 event 列,请参见下文:

数据=

enter image description here

该列类似于 start --> some events --> end。我想选择每个 startend 之间的所有行,并忽略最后一个 end 和下一个 之间的任何内容>开始,并继续迭代,直到获得所有有效事件。如下所示:

enter image description here

下面是我迄今为止尝试过但没有成功的步骤 - 尝试创建一系列索引并动态传递这些多个范围:

方法一:

idx_start = data.index[data.event == 'start']
#RESULT = Int64Index([0, 9], dtype='int64')

idx_end = data.index[data.event == 'end']
#RESULT:Int64Index([6, 14], dtype='int64')

data.loc[np.r_[map(range,list(zip(idx_start,idx_end)))],:]
#Which is supposed to show in above case
data.loc[np.r_[range(0,6),range(9,14)],:]

enter image description here

但我想动态显示上面的结果,而不是手动编写特定的索引。

方法2:

我也尝试过使用我在网上看到的某种类型的过滤,但不确定如何使用它:

pd.factorize(data['event'].isin(['start','end']).iloc[::-1].cumsum().sort_index())[0]

很高兴拥有:

如果我能为每个 startend 事件以及最后一个 end 和下一个 之间的任何内容创建一个计数器标志,那就太好了>start 应标记为 NA:

enter image description here

如有任何帮助,我们将不胜感激,提前致谢。

最佳答案

我的一位 friend 刚刚帮助我完成了必须具备部分,并且它正在工作!只是将其发布在下面以供引用。请随意解决显示增量而不是单个值的 Nice To Have 部分。谢谢!

idx_start = data.index[data.event == 'start']
idx_end = data.index[data.event == 'end']
good = list(zip(list(idx_start), list(idx_end)))#required sequences

#unpack list of list
g2 = [list(range(x[0],x[1]+1)) for x in good]

#data.iloc[np.r_[[y for x in g2 for y in x]]]#If you want to return just the valid dataset

l =[y for x in g2 for y in x]

data['mark'] = np.where((data.index.isin(l)),1,None)

关于python - 使用 pandas 选择数据框中两个特定字符串之间的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66378314/

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