如何按指定列的取值出现次数将DataFrame拆分为两个?
Pandas 拆分DataFrame实现方案
你可以通过分组计数加筛选的逻辑完成需求,以下是两种可行的实现方式:
方式1:transform计数法(大数据量下性能更优)
import pandas as pd # 构造示例数据,实际使用时替换为你自己的DataFrame即可 df = pd.DataFrame({ "Project_Number": ["S100", "S100", "S200", "S300", "S300", "S300", "S400"], "Indication": ["X", "Y", "Z", "P", "Q", "R", "S"] }) # 统计每个Project_Number对应的总记录数,标记到每行 df['cnt'] = df.groupby('Project_Number')['Project_Number'].transform('count') # 按规则拆分 df1 = df[df['cnt'] > 1].drop(columns='cnt').reset_index(drop=True) df2 = df[df['cnt'] == 1].drop(columns='cnt').reset_index(drop=True)
方式2:groupby filter写法(代码更简洁)
不需要新增临时计数列,直接通过分组过滤实现:
df1 = df.groupby('Project_Number').filter(lambda group: len(group) > 1).reset_index(drop=True) df2 = df.groupby('Project_Number').filter(lambda group: len(group) == 1).reset_index(drop=True)
两种方式运行后得到的df1和df2完全符合你给出的预期输出。
内容的提问来源于stack exchange,提问作者Shivika
相关产品推荐
相关产品推荐

