首页 > 解决方案 > 根据包含另一列中的多个类别值的一列值拆分数据框

问题描述

我正在尝试从以下数据创建两个数据框:

df = pd.DataFrame({'Product':['Prod1','Prod2','Prod3','Prod2','Prod5','Prod3']*4, 
                  'Inv_Type': ['X', 'Y']*12,
                 'Quant': np.random.randint(2,20, size=24)})

df.sort_values('Product', inplace=True, ignore_index=True) --Help with visual

它们需要根据产品是否同时具有与它们相关联的 X 和 Y 或只有所有 X 或所有 Y 来区分。

期望的输出:

df1 = df[df['Product'] == 'Prod3']
df2 = df[df['Product'].str.contains('Prod1|Prod2|Prod5', na=False)]

我已经尝试过无数次使用过滤器的 groupby 尝试,但我显然遗漏了一些东西。

标签: pythonpandas

解决方案


m = df.groupby("Product")["Inv_Type"].transform(lambda x: len(x.unique()) == 1)

df1 = df[~m]
df2 = df[m]
print(df1)
print(df2)

印刷:

   Product Inv_Type  Quant
12   Prod3        X      4
13   Prod3        Y     18
14   Prod3        Y     11
15   Prod3        X      5
16   Prod3        Y      5
17   Prod3        X      3
18   Prod3        X     16
19   Prod3        Y     11

   Product Inv_Type  Quant
0    Prod1        X      5
1    Prod1        X      6
2    Prod1        X      8
3    Prod1        X     17
4    Prod2        Y      3
5    Prod2        Y     13
6    Prod2        Y      9
7    Prod2        Y      8
8    Prod2        Y      7
9    Prod2        Y      5
10   Prod2        Y     18
11   Prod2        Y     11
20   Prod5        X      4
21   Prod5        X     15
22   Prod5        X     10
23   Prod5        X      6

推荐阅读