如何比较熊猫中不同列的值

时间:2020-03-05 14:33:34

标签: python python-3.x pandas dataframe

我正在进行质量检查,我需要比较两个不同域中的许多着陆页,并检查两个站点中是否都包含某些ID。

我已经完成了抓取工作,到目前为止,我有一个像这样的数据框: (很抱歉,如果我没有使用正确的格式来显示df,这是我第一次在这里提出问题,我不知道如何正确执行此操作)

  STAGE-1001-1001     PROD-1001-1001      STAGE-1001-1002     PRODs-1001-1002
0     ab1311             ab1311                qa1311               qa1311   
1     ac1312             ac1312                qq1311               qq1311   
2     ad1311             ad1311                qc1313               qc1313   
3     acb1313            acb1313               qd1312               qd1312   
4     a1311              a1311                 qe131e               qe131e  

基本上,我需要对每种产品的STAGE列与PROD列进行比较,在这种情况下,是STAGE-1001-1001对PROD-1001-1001和PROD-1001-1002对PROD-1001-1002

有什么想法吗?

我的想法是(完成后)具有类似于以下内容的df:

             TRUE    FALSE
1001-1001    True
1001-1002    True
1001-1003            False
1001-1004    True    
...

如果ID相同,则为True;如果缺少ID,则为False。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一种解决方法( pandastic 少得多)

# Get product IDs if you don't have them yet
products = {col.split('-', 1)[-1] for col in df.columns}

products_validity = dict()

for prod_id in products:
    is_valid = (df['PROD-'+prod_id]==df['STAGE-'+prod_id]).all()
    products_validity[prod_id] = [is_valid]

validity_df = pd.DataFrame.from_dict(
    products_validity, 
    orient='index', 
    columns=['is_valid']
)
# Create inversed column if needed
validity_df['is_not_valid'] = ~validity_df['is_valid']