我有一个表事务,其列为OrderNumbers。在此列中,我为每个订单提供了如下格式的值:
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次被重新创造。
我需要做的是只选择最新的订单,如下所示:
OrderNumber
-----------
0001
0002
0003-1
0004
0005
0006-2
0007
0008
0009
0010-1
0011-3
0012我试过用熊猫
import pandas as pd
df = df[df["OrderNumber"].str.contains("-")]这将选择所有重新创建的订单,但如果我多次重新创建我的订单,我只需要最新的订单。
如果订单从未被重新创建,我需要原始订单,就像我在上面的例子中显示的那样。
我该怎么处理熊猫呢?
发布于 2022-08-31 02:28:33
如果您转换为df并将值读取为整数,则此方法适用于我。
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发布于 2022-08-31 02:20:44
您可以提取订单编号的第一部分,然后使用duplicated检测每个数字的最后顺序:
# also str.extract('([^-]+)')
ordernumbers = df['OrderNumber'].str.extract('(\d+)')
df[~ordernumbers.duplicated(keep='last')]输出:
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 0012https://stackoverflow.com/questions/73550189
复制相似问题