如何通过for循环过滤Pandas DataFrame以生成多个子DataFrame
实现按产品拆分独立DataFrame的方案
没问题,我来帮你搞定这个需求!要遍历product列的唯一值并生成对应产品的独立DataFrame,其实很简单,下面给你两种实用的实现方式:
方式一:用字典存储所有产品的DataFrame(推荐)
这种方式最灵活,后续可以通过产品名称快速调取对应的DataFrame,不会造成变量名混乱:
import pandas as pd # 你的原始DataFrame df = pd.DataFrame({ 'date': ['2001-01-01', '2001-02-01', '2001-01-01', '2001-02-01', '2001-02-01', '2001-03-01'], 'product': ['A', 'A', 'B', 'B', 'C', 'C'], 'value': [2.5, 2.6, 1.5, 1.6, 3.2, 3.4] }) # 创建空字典用于存储各个产品的DataFrame product_dfs = {} # 遍历product列的唯一值 for product in df['product'].unique(): # 筛选当前产品的所有行,存入字典;用copy避免后续修改影响原始数据 product_dfs[product] = df[df['product'] == product].copy() # 验证结果:打印产品A的DataFrame print("产品A的DataFrame:") print(product_dfs['A'])
运行后输出产品A的DataFrame:
date product value 0 2001-01-01 A 2.5 1 2001-02-01 A 2.6
后续要访问其他产品的数据,直接用product_dfs['B']、product_dfs['C']即可,非常便捷。
方式二:直接创建独立命名的变量
如果你确实需要每个产品对应单独的变量(比如df_A、df_B),可以这样实现:
import pandas as pd df = pd.DataFrame({ 'date': ['2001-01-01', '2001-02-01', '2001-01-01', '2001-02-01', '2001-02-01', '2001-03-01'], 'product': ['A', 'A', 'B', 'B', 'C', 'C'], 'value': [2.5, 2.6, 1.5, 1.6, 3.2, 3.4] }) for product in df['product'].unique(): # 动态创建变量名,比如df_A、df_B globals()[f'df_{product}'] = df[df['product'] == product].copy() # 验证结果:打印df_B print("产品B的DataFrame:") print(df_B)
输出产品B的DataFrame:
date product value 2 2001-01-01 B 1.5 3 2001-02-01 B 1.6
不过这种方式要注意,如果产品名称较多,会生成大量零散变量,不利于代码维护,所以更推荐第一种字典存储的方式~
内容的提问来源于stack exchange,提问作者Gaurav Bansal
相关产品推荐
相关产品推荐

