gpt4 book ai didi

python - Pandas 使用同一列中的下一个可用值填充列值

转载 作者:行者123 更新时间:2023-11-28 22:16:50 25 4
gpt4 key购买 nike

我正在处理一个数据集,其中 PLU 列中的值分散在各处,例如:我有 500 多列中的 4 列:

Inventory_No | Description | Group | PLU
----------------------------------------------
93120007 | Coke |Drinks | 1000
93120008 | Diet Coke |Drinks | 1003
93120009 | Coke Zero |Drinks | 1104
93120010 | Fanta |Drinks | 1105

93120011 | White Bread |Bread | 93120011
93120012 | whole Meal |Bread | 93120012
93120013 | Whole Grains|Bread | 110011
93120014 | Flat white |Breads | 1115092

我希望我的输出如下所示,如果 PLU 列中有任何长度超过 6 位的值,系统会检查 PLU 序列中长度小于 4 位的下一个可用数字并添加增量1 并将 PLU 值分配给该行,并且不更改任何现有的少于 6 位的 PLU:

Inventory_No | Description | Group | PLU
----------------------------------------------
93120007 | Coke |Drinks | 1000
93120011 | White Bread |Bread | 1001
93120012 | whole Meal |Bread | 1002
93120008 | Diet Coke |Drinks | 1003
93120014 | Flat white |Breads | 1004
. | . | . | .
. | . | . | .
. | . | . | .
93120009 | Coke Zero |Drinks | 1104
93120010 | Fanta |Drinks | 1105
93120013 | Whole Grains|Bread | 110011

我想要序列中少于 6 位数字的下一个可用值并将其递增 1,如果它找到任意数量递增值的序列,则跳过序列并从序列后的下一个可用值开始,只要序列长度少于 6 位:
我已经检查了以下链接,它们是用 0 或 Nan 值填充序列
fill-in-a-missing-values-in-range-with-pandas
missing-data-insert-rows-in-pandas-and-fill-with-nan

预先感谢您的回答。问候,

最佳答案

设置

print(df)

Inventory_No Description Group PLU
0 93120007 Coke Drinks 1000
1 93120008 Diet Coke Drinks 1003
2 93120009 Coke Zero Drinks 1104
3 93120010 Fanta Drinks 1105
4 93120011 White Bread Bread 93120011
5 93120012 whole Meal Bread 93120012
6 93120013 Whole Grains Bread 110011
7 93120014 Flat white Breads 1115092

首先,让我们创建一个值列表,我们可以使用这些值来填充 包含在 df.PLU 中的值:

fillers = [
i for i in np.arange(df.PLU.min(), df.PLU.min() + len(df)) if i not in set(df.PLU)
]
# [1001, 1002, 1004, 1005, 1006, 1007]

现在我们可以用我们的新值制作一个系列并填充:

condition = df.PLU.ge(1e6)
s = df.loc[condition]
fill = pd.Series(fillers[len(s):], index=s.index)
df.assign(PLU=df.PLU.mask(condition).fillna(fill).astype(int)).sort_values('PLU')

输出:

   Inventory_No   Description   Group     PLU
0 93120007 Coke Drinks 1000
4 93120011 White Bread Bread 1001
5 93120012 whole Meal Bread 1002
1 93120008 Diet Coke Drinks 1003
7 93120014 Flat white Breads 1004
2 93120009 Coke Zero Drinks 1104
3 93120010 Fanta Drinks 1105
6 93120013 Whole Grains Bread 110011

关于python - Pandas 使用同一列中的下一个可用值填充列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51919178/

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