从另一列中获取具有至少一个指定值的值
Taking values with at least one specified values from another column
我有这个数据集
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 至少包含一个 'accesories' 的方式来过滤数据集。所以我想删除其中只有 'major' 的文档。
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,但我做不到。
提前致谢
给定 pd.DataFrame
df
:
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')]
,使用的 returns documentno
值具有一个或多个 accesories
。
我假设数据集 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()) ,:]
这是我遵循的方法,
首先为文档制作另一列,其中包含不同产品类型的数量
df['n_cats'] = df.groupby('documentno')['producttype'].transform('nunique')
然后删除仅与 major
相关的值
df = df.drop(df[(df['n_cats'] == 1) & (df['producttype'] == 'major')].index)
谢谢
我有这个数据集
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 至少包含一个 'accesories' 的方式来过滤数据集。所以我想删除其中只有 'major' 的文档。
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,但我做不到。
提前致谢
给定 pd.DataFrame
df
:
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')]
,使用的 returns documentno
值具有一个或多个 accesories
。
我假设数据集 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()) ,:]
这是我遵循的方法,
首先为文档制作另一列,其中包含不同产品类型的数量
df['n_cats'] = df.groupby('documentno')['producttype'].transform('nunique')
然后删除仅与 major
相关的值df = df.drop(df[(df['n_cats'] == 1) & (df['producttype'] == 'major')].index)
谢谢