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

基于指定dialog_id拆分Pandas大DataFrame的最优实现方法

Pandas大型DataFrame按指定频道拆分的优雅方法

直接用isin()方法就能搞定,这是处理多值匹配最简洁高效的方式,比堆一堆逻辑或运算符靠谱多了:

  1. 先把你要拆分的13个目标dialog_id存成列表:
target_dialog_ids = [-1001232032465, -1001153765346, ...]  # 补全剩下的11个ID
  1. 拆分出目标频道的DataFrame:
# 方法1:布尔索引(最常用)
df_selected = df[df['dialog_id'].isin(target_dialog_ids)]

# 方法2:用loc(适合需要同时筛选列的场景)
df_selected = df.loc[df['dialog_id'].isin(target_dialog_ids), :]

# 方法3:query写法(贴近SQL逻辑,可读性强)
df_selected = df.query('dialog_id in @target_dialog_ids')
  1. 拆分出剩下的13个频道的DataFrame,给布尔条件加取反符号~即可:
# 对应方法1
df_rest = df[~df['dialog_id'].isin(target_dialog_ids)]

# 对应方法3
df_rest = df.query('dialog_id not in @target_dialog_ids')

为啥你之前用&不行?

&是逻辑与,而你需要的是“匹配x或y或z...”的逻辑或,就算换成|,13个条件写起来会超级冗长还容易出错,isin()就是Pandas专门为这种多值匹配场景设计的,既优雅又能保证性能,70万行的量级完全没问题。

验证拆分是否正确

可以跑两行代码确认:

# 检查总行数是否和原数据一致
print(len(df_selected) + len(df_rest) == len(df))  # 正常会返回True

# 检查两个DataFrame的频道数量
print(df_selected['dialog_id'].nunique())  # 应该是13
print(df_rest['dialog_id'].nunique())  # 应该是13

内容的提问来源于stack exchange,提问作者Софія Гринь

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:01:54