gpt4 book ai didi

python - 多个类别的出现顺序

转载 作者:行者123 更新时间:2023-11-30 22:56:37 26 4
gpt4 key购买 nike

我已经尝试了很长时间来做到这一点,但我坚持了下来。我有很多机器生产盒子,每个盒子都包含元素。所有元素、盒子均带有序列号标签。

我想根据图片中的 box_sn 生成序列计数。

我希望 pandas 数据框解决方案或 Excel 公式。任何专家都可以给我提示来解决这个问题吗?谢谢。

enter image description here

编辑:我能够根据单个类别生成序列号,如下图所示。公式为:G2 = IF(B2<>B1,G1+1,G1)这将继续对 box_sn 进行排序,但我希望机器 B box_sn 重新启动该序列。 enter image description here

编辑2:这是我的 temp_reading 的最终结果。非常感谢。 enter image description here

最佳答案

与 Pandas :

首先,创建数据框:

import pandas as pd
df = pd.DataFrame({
'machine': ['A','A','A','A','B','B','B','B','B','B'],
'box_sn': ['A3','A3','A5','A5','B1','B1','B2','B2','B3','B3'],
'item_sn': ['i1','i2','i3','i4','i1','i2','i3','i4','i5','i6']
})

第二,使用单台机器(此处为B):

dfB = df[df.machine == 'B']
(dfB['box_sn'].shift() != dfB['box_sn']).cumsum()

每当盒子序列号发生变化时,cumsum 就会递增 - 这就是您想要的。 (这是假设序列号是有序的,否则您可以使用 sort_values。)

第三,通过groupby将上述内容应用于整个数据框:

def sequence(df1):
return (df1['box_sn'].shift() != df1['box_sn']).cumsum()
df_sequence = df.groupby('machine').apply(sequence)

这是输出(我们就快到了):

In [17]: df_sequence
Out[17]:
machine
A 0 1
1 1
2 2
3 2
B 4 1
5 1
6 2
7 2
8 3
9 3

第四,在将结果包含到原始数据帧之前,我们需要删除索引的第一级(AB) :

df_sequence.index = df_sequence.index.droplevel(0)
df['sequence'] = df_sequence

关于python - 多个类别的出现顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36943472/

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