You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Pandas DataFrame列的唯一字符串自动创建并命名新DataFrame

解决方法:根据字符串数组创建对应命名的筛选DataFrame

嗨,我来帮你搞定这个需求!首先先明确一下,df.col1.unique()返回的是去重后的字符串数组(你写的strings里有重复的str9,应该是笔误,实际unique()会返回['str9', 'str8', 'str2']),下面给你两种可行的实现方式:

方法一:用字典存储(强烈推荐)

直接创建变量容易导致命名混乱,用字典来存放每个筛选后的DataFrame是更规范的做法,键就是字符串数组里的值,值对应筛选结果,后续管理和访问都很方便。

首先先构建示例DataFrame方便测试:

import pandas as pd

# 构建你的原始DataFrame
data = {
    'col1': ['str9', 'str8', 'str9', 'str2'],
    'col2': [47, 43, 46, 42],
    'col3': [55, 51, 52, 56]
}
df = pd.DataFrame(data)

# 获取去重后的字符串数组
strings = df.col1.unique()

然后创建字典存储筛选结果:

df_collection = {}
for s in strings:
    df_collection[s] = df[df['col1'] == s]

# 访问示例:获取str9对应的DataFrame
print(df_collection['str9'])

输出结果:

col1  col2  col3
0  str9    47    55
2  str9    46    52

方法二:动态创建变量(谨慎使用)

如果你确实需要直接创建以字符串值命名的变量,可以用globals()动态生成,但这种方式容易引发变量名冲突,也不利于后续代码维护,所以只在必要时使用:

for s in strings:
    # 动态生成变量,变量名就是s的取值(比如str9、str8)
    globals()[s] = df[df['col1'] == s]

# 直接访问生成的变量
print(str9)

注意事项

  • 如果你提供的strings数组存在重复值,后面的重复项会覆盖之前创建的结果,所以务必先用unique()去重,避免重复操作。
  • 优先选择字典存储的方式,尤其是当字符串数量较多时,字典更便于遍历和管理。

内容的提问来源于stack exchange,提问作者dward4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:49:20