首页 > 解决方案 > 检查完整性和最新版本 - Pandas Dataframe

问题描述

我有一个包含产品描述、零件编号 ID、零件总数和产品版本的数据框。

*product  part_id total_parts version*
Product1     1       3           0
Product1     2       3           0
Product2     1       1           0
Product2     1       1           1
Product3     1       2           0
Product3     2       2           0

我想添加两列。如果所有部件都在 df 中(完整),一个用于标记,另一个用于标记产品的最新版本(is_the_latest)。

结果应该是这样的:

   *product  part_id total_parts version* complete  is_the_latest
    Product1     1       3           0        N            Y
    Product1     2       3           0        N            Y
    Product2     1       1           0        Y            N    
    Product2     1       1           1        Y            Y
    Product3     1       2           0        Y            Y
    Product3     2       2           0        Y            Y

版本可以在 0 到 4 范围内。部件可以在 1 到 250 范围内。如何创建这些标志?

标签: pythonpandasdataframe

解决方案


IIUC 尝试:

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'product': {0: 'Product1', 1: 'Product1', 2: 'Product2',
                3: 'Product2', 4: 'Product3', 5: 'Product3'},
    'part_id': {0: 1, 1: 2, 2: 1, 3: 1, 4: 1, 5: 2},
    'total_parts': {0: 3, 1: 3, 2: 1, 3: 1, 4: 2, 5: 2},
    'version': {0: 0, 1: 0, 2: 0, 3: 1, 4: 0, 5: 0}
})

# Groupby product
g = df.groupby('product')

# Check if number of unique part ids matches expected number of parts
df['complete'] = np.where(
    g['part_id'].transform('nunique').eq(df['total_parts']),
    'Y',
    'N'
)

# Check that the max version equals the current version
df['is_the_latest'] = np.where(
    g['version'].transform('max').eq(df['version']),
    'Y',
    'N'
)

print(df)

df

    product  part_id  total_parts  version complete is_the_latest
0  Product1        1            3        0        N             Y
1  Product1        2            3        0        N             Y
2  Product2        1            1        0        Y             N
3  Product2        1            1        1        Y             Y
4  Product3        1            2        0        Y             Y
5  Product3        2            2        0        Y             Y

推荐阅读