我已经尝试了很长时间才能做到这一点,但我坚持了下来。 我有很多机器生产盒子,每个盒子都包含物品。 所有项目,盒子都是串行标记的。
我想根据图片中的结果生成基于box_sn的序列计数。
我希望pandas数据帧解决方案或excel公式。任何专家都可以给我一些解决方法吗? 谢谢。
编辑:
我可以根据单个catergories生成序列号,如下图所示。
具有下式:G2 = IF(B2
答案 0 :(得分:2)
用熊猫:
首先,创建数据框:
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
第四,在将结果包含在原始数据框中之前,我们需要删除索引的第一级(A
,B
):
df_sequence.index = df_sequence.index.droplevel(0)
df['sequence'] = df_sequence
答案 1 :(得分:1)
根据您的编辑,Excel解决方案将(在F列中输入):
=IF(A2<>A1,1,IF(B2=B1,F1,F1+1))
答案 2 :(得分:0)
使用
读取数据后听起来很糟糕df = pd.read_excel(path)
你可以这样做:
df.groupby('box_sn').size()
IIUC,您的目标是获得每box_sn
项的数量?