从另一列中获取至少具有一个指定值的值

2024-10-03 09:08:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个数据集

custID     documentno    quantity    producttype
1          1281261658       3        accesories
1          1281261658       3        major
1          1281261658       3        accesories
2          0105162445       2        major      
2          0105162445       2        major
3          0100848728       2        major
3          0100848728       2        accesories
4          0106075074       1        major

因此,我希望以一种我希望documentno中至少包含一个“附件”的方式过滤数据集。所以我想删除只包含“主要”的文档

custID = {1,1,1,2,2,3,3,4}
documentno = {1281261658,1281261658,1281261658,0105162445,0105162445,0100848728,0100848728,0106075074}
quantity = {3,3,3,2,2,2,2,1}
producttype = {'accesories','major','accesories','major','major','major','accesories','major'}

最终结果是:

id     documentno   quantity    producttype
1      1281261658      3        accesories
1      1281261658      3        major
1      1281261658      3        accesories
3      0100848728      2        major
3      0100848728      2        accesories

我试过用if else,但我做不到

提前谢谢


Tags: 数据文档id附件if方式elsequantity
2条回答

这是我遵循的方法

首先在文档中创建另一列,其中包含不同产品类型的编号

df['n_cats'] = df.groupby('documentno')['producttype'].transform('nunique')

然后删除仅使用MARGY的值

df = df.drop(df[(df['n_cats'] == 1) & (df['producttype'] == 'major')].index)

多谢各位

给定pd.DataFrame{}:

df = pd.DataFrame({'id' : [1,1,1,2,2,3,3,4],
                   'documentno' : ['1281261658','1281261658','1281261658','0105162445','0105162445','0100848728','0100848728','0106075074'],
                   'quantity' : [3,3,3,2,2,2,2,1],
                   'producttype' : ['accesories','major','accesories','major','major','major','accesories','major']})

请尝试以下操作:

df.loc[df.documentno.isin(df.documentno[df.producttype.eq('accesories')].unique()),:]

结果是:

   id  documentno  quantity producttype
0   1  1281261658         3  accesories
1   1  1281261658         3       major
2   1  1281261658         3  accesories
5   3  0100848728         2       major
6   3  0100848728         2  accesories

使用df.documentno[df.producttype.eq('accesories')]作为过滤器,它返回具有一个或多个accesoriesdocumentno值。 我假设数据集df中的quantity总是大于0

但是,如果quantity可能为零:

df = pd.DataFrame({'id' : [1,1,1,2,2,3,3,4],
                   'documentno' : ['1281261658','1281261658','1281261658','0105162445','0105162445','0100848728','0100848728','0106075074'],
                   'quantity' : [3,3,3,2,2,2,0,1],
                   'producttype' : ['accesories','major','accesories','major','major','major','accesories','major']})

只需添加条件df.quantity.gt(0)

df.loc[ df.documentno.isin(df.documentno[(df.producttype.eq('accesories') & df.quantity.gt(0))].unique()) ,:]

相关问题 更多 >