python - 根据包含另一列中的多个类别值的一列值拆分数据框
问题描述
我正在尝试从以下数据创建两个数据框:
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 尝试,但我显然遗漏了一些东西。
解决方案
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
推荐阅读
- sqlite - 在 SQLite 列中拆分数据
- c++ - 为什么在 C++20 中不推荐使用 volatile?
- go - Go Web Assembly 在输入 http://localhost:8080/wasm_exec.html 时无法点击运行
- django - 如何在 Django 中使用 bulk_update() 方法更新 many_to_many 关系字段?
- javascript - AngularFireAuth.auth.signInAnonymously 不返回承诺?
- java - 升级oracle驱动后oracle游标泄露
- javascript - reactjs中的登录页面验证
- python - 如何比较列表和列表中的列表
- amazon-web-services - AWS CLI (Windows) 中缺少检测自定义标签
- swift - 可选项返回 nil 的精确点