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

如何基于字符串列值拆分DataFrame?Pandas新手求助

嘿,作为编程和Pandas的新手,能想到用groupby或者sort来解决拆分问题真的很赞!下面我给你详细拆解这两种方案的实现方式,你可以根据自己的需求来选:

方案一:使用groupby(推荐,灵活高效)

groupby是Pandas里专门用来分组处理数据的工具,刚好完美匹配你按Particulars拆分DataFrame的需求。它会自动把相同Particulars值的行归为一组,你可以把这些分组转换成字典,直接通过键名(也就是ABC/EFG/BCD)获取对应的子DataFrame。

代码示例:

import pandas as pd

# 还原你的原始DataFrame
data = {
    'Date': ['2017-04-01', '2017-07-22', '2017-09-05', '2018-03-13'],
    'Particulars': ['EFG', 'ABC', 'BCD', 'ABC'],
    'Inwards': [12800, 100, 10000, 2000],
    'Code': ['01', '01', '01', '01']
}
df = pd.DataFrame(data)

# 按Particulars分组,转成字典存储
grouped_dfs = {name: group for name, group in df.groupby('Particulars')}

# 直接通过键名获取对应DataFrame
df_abc = grouped_dfs['ABC']
df_efg = grouped_dfs['EFG']
df_bcd = grouped_dfs['BCD']

# 查看结果
print("=== ABC的记录 ===")
print(df_abc)
print("\n=== EFG的记录 ===")
print(df_efg)
print("\n=== BCD的记录 ===")
print(df_bcd)

这个方法的好处是自动适配所有不同的Particulars值,哪怕以后数据里新增了其他值(比如XYZ),也不用改代码,直接从字典里取就行,非常灵活。

方案二:先排序再筛选(直观易懂)

如果你更习惯直白的筛选逻辑,也可以先给Particulars列排序,再用布尔索引分别筛选出ABC/EFG/BCD的记录。

代码示例:

# 先按Particulars列排序,让相同值的行集中在一起
df_sorted = df.sort_values('Particulars')

# 分别筛选目标记录
df_abc = df_sorted[df_sorted['Particulars'] == 'ABC']
df_bcd = df_sorted[df_sorted['Particulars'] == 'BCD']
df_efg = df_sorted[df_sorted['Particulars'] == 'EFG']

# 查看结果
print("=== 排序后的ABC记录 ===")
print(df_abc)

这个方法的优势是逻辑简单直白,新手一眼就能看懂,但缺点是如果以后新增了其他Particulars值,你需要手动添加新的筛选语句,不像groupby那样自动处理。

两种方案都能实现你的需求,如果你只是处理固定的三个值,两种都能用;如果以后数据可能有扩展,优先选groupby哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:31:27