如何基于Pandas DataFrame的唯一entity值创建带df_前缀的子DataFrame
问题:按Entity列唯一值拆分DataFrame并命名为df_前缀的独立DataFrame
首先给出原始DataFrame的定义代码:
import pandas as pd df = pd.DataFrame({ 'entity': ['foo', ' bar', 'baz', 'buzz', 'bar', 'buzz', 'foo', 'foo'], 'value': [4, 3, 2, 1, 9, 8, 7, 4] })
对应的DataFrame内容:
| entity | value | |
|---|---|---|
| 0 | foo | 4 |
| 1 | bar | 3 |
| 2 | baz | 2 |
| 3 | buzz | 1 |
| 4 | bar | 9 |
| 5 | buzz | 8 |
| 6 | foo | 7 |
| 7 | foo | 4 |
需求:针对entity列的每个唯一值创建独立的DataFrame,命名格式为df_<唯一值>(如df_foo、df_bar等)。
方法1:动态创建全局变量(不推荐,易污染命名空间)
利用Python的globals()函数直接生成对应变量,步骤如下:
# 先清理entity列的前置/后置空格(原始数据中存在' bar'这类带空格的值,确保同实体统一) df['entity'] = df['entity'].str.strip() # 遍历每个唯一entity值,生成对应DataFrame变量 for entity in df['entity'].unique(): globals()[f'df_{entity}'] = df[df['entity'] == entity].reset_index(drop=True)
执行后可直接调用df_foo、df_bar等变量,每个变量对应筛选后的子DataFrame。
方法2:用字典存储(推荐,规范易管理)
如果不想污染全局命名空间,建议用字典统一存储所有子DataFrame,避免变量冲突:
# 清理entity列空格 df['entity'] = df['entity'].str.strip() # 创建字典存储子DataFrame df_collection = {} for entity in df['entity'].unique(): df_collection[f'df_{entity}'] = df[df['entity'] == entity].reset_index(drop=True) # 调用示例:df_collection['df_foo']、df_collection['df_bar']
这种方式更安全,也方便后续批量操作所有子DataFrame。
注意:如果不需要清理
entity列的空格,可去掉str.strip()步骤。
内容的提问来源于stack exchange,提问作者equanimity
相关产品推荐
相关产品推荐

