多个catergories发生的顺序

时间:2016-04-29 16:37:46

标签: python excel pandas

我已经尝试了很长时间才能做到这一点,但我坚持了下来。 我有很多机器生产盒子,每个盒子都包含物品。 所有项目,盒子都是串行标记的。

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

我希望pandas数据帧解决方案或excel公式。任何专家都可以给我一些解决方法吗? 谢谢。

enter image description here

编辑: 我可以根据单个catergories生成序列号,如下图所示。 具有下式:G2 = IF(B2 enter image description here

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

3 个答案:

答案 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

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

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项的数量?