首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python --如何根据后缀数字过滤数据?

Python --如何根据后缀数字过滤数据?
EN

Stack Overflow用户
提问于 2022-08-31 02:06:32
回答 2查看 32关注 0票数 1

我有一个表事务,其列为OrderNumbers。在此列中,我为每个订单提供了如下格式的值:

代码语言:javascript
复制
OrderNumber
-----------
0001
0002
0003
0003-1
0004
0005
0006
0006-1
0006-2
0007
0008
0009
0010
0010-1
0011
0011-1
0011-2
0011-3
0012

一些订单正在被取消和重新创建。我有-1,-2和-3后缀。-3将是最新的,这可以上升到-3,-4,甚至-5次被重新创造。

我需要做的是只选择最新的订单,如下所示:

代码语言:javascript
复制
OrderNumber
-----------
0001
0002
0003-1
0004
0005
0006-2
0007
0008
0009
0010-1
0011-3
0012

我试过用熊猫

代码语言:javascript
复制
import pandas as pd
df = df[df["OrderNumber"].str.contains("-")]

这将选择所有重新创建的订单,但如果我多次重新创建我的订单,我只需要最新的订单。

如果订单从未被重新创建,我需要原始订单,就像我在上面的例子中显示的那样。

我该怎么处理熊猫呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-31 02:28:33

如果您转换为df并将值读取为整数,则此方法适用于我。

代码语言:javascript
复制
lista_df = []

for i in df['OrderNumber']:
    if isinstance(i, str):
        lista_df[-1] = i
    else:
        lista_df.append(str(i).zfill(4)) # Put zeros to the left

new_df = pd.DataFrame(lista_df)
new_df.columns = ['OrderNumber']
print(new_df)

# Output
OrderNumber
0   0001
1   0002
2   0003-1
3   0004
4   0005
5   0006-2
6   0007
7   0008
8   0009
9   0010-1
10  0011-3
11  0012
票数 1
EN

Stack Overflow用户

发布于 2022-08-31 02:20:44

您可以提取订单编号的第一部分,然后使用duplicated检测每个数字的最后顺序:

代码语言:javascript
复制
# also str.extract('([^-]+)')
ordernumbers = df['OrderNumber'].str.extract('(\d+)')
df[~ordernumbers.duplicated(keep='last')]

输出:

代码语言:javascript
复制
   OrderNumber
0         0001
1         0002
3       0003-1
4         0004
5         0005
8       0006-2
9         0007
10        0008
11        0009
13      0010-1
17      0011-3
18        0012
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73550189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档