如何用Pandas按日期、产品、类型分组DataFrame并生成新子DataFrame?
按多条件分组并生成独立DataFrame的Pandas实现方法
核心结论
groupby完全是实现该需求的最优方案,它可以直接按你指定的日期、产品、交易类型三个字段对DataFrame进行分组,并且能轻松提取每个分组对应的独立DataFrame。
具体实现代码
1. 构造原始DataFrame
先把你提供的原始数据转换成Pandas DataFrame:
import pandas as pd data = { 'ID': [1, 2, 3, 4, 5, 6, 7, 8], 'Date': ['1/1/2023', '1/1/2023', '1/1/2023', '1/1/2023', '1/2/2023', '1/2/2023', '1/3/2023', '1/3/2023'], 'Product': ['Bike', 'Bike', 'Bike', 'Bike', 'Car', 'Car', 'Truck', 'Truck'], 'Type': ['Buy', 'Buy', 'Sell', 'Sell', 'Sell', 'Sell', 'Buy', 'Buy'], 'Cost': [10.00, 10.00, 10.00, 10.00, 20.00, 20.00, 30.00, 30.00], 'Quantity': [1, 1, 1, 1, 1, 1, 1, 1] } df = pd.DataFrame(data)
2. 分组并提取独立DataFrame
使用groupby按三个字段分组,然后遍历分组得到每个独立的DataFrame:
# 按Date、Product、Type三个字段分组 grouped = df.groupby(['Date', 'Product', 'Type']) # 方式1:将分组存入列表,方便批量处理 grouped_dfs = [] for group_key, group_df in grouped: grouped_dfs.append(group_df) # 打印分组信息和内容(可选) print(f"分组键:{group_key}") print(group_df) print("-" * 50) # 方式2:存入字典,可通过分组键快速查找 grouped_dict = dict(list(grouped)) # 示例:获取指定分组的DataFrame bike_buy_df = grouped_dict[('1/1/2023', 'Bike', 'Buy')]
输出效果
运行上述代码后,每个分组会输出如下格式的DataFrame(与你期望的结果一致):
分组键:('1/1/2023', 'Bike', 'Buy') ID Date Product Type Cost Quantity 0 1 1/1/2023 Bike Buy 10.0 1 1 2 1/1/2023 Bike Buy 10.0 1 -------------------------------------------------- 分组键:('1/1/2023', 'Bike', 'Sell') ID Date Product Type Cost Quantity 2 3 1/1/2023 Bike Sell 10.0 1 3 4 1/1/2023 Bike Sell 10.0 1 -------------------------------------------------- 分组键:('1/2/2023', 'Car', 'Sell') ID Date Product Type Cost Quantity 4 5 1/2/2023 Car Sell 20.0 1 5 6 1/2/2023 Car Sell 20.0 1 -------------------------------------------------- 分组键:('1/3/2023', 'Truck', 'Buy') ID Date Product Type Cost Quantity 6 7 1/3/2023 Truck Buy 30.0 1 7 8 1/3/2023 Truck Buy 30.0 1 --------------------------------------------------
内容的提问来源于stack exchange,提问作者iBeMeltin
相关产品推荐
相关产品推荐

