如何基于字符串列值拆分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
相关产品推荐
相关产品推荐

