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

如何根据In/Out列的值对Pandas DataFrame进行条件去重?

解决方案

要实现根据In/Out的值差异化保留重复行的需求,可以通过拆分数据子集分别处理后合并的方式实现,具体步骤如下:

步骤说明

  • 将数据按In/Out拆分为两个子集:df_in(值为'in')和df_out(值为'out')
  • 对df_in:按['Id', 'Day', 'In/Out']分组,保留每组的首行(对应最早的记录)
  • 对df_out:按['Id', 'Day', 'In/Out']分组,保留每组的末行(对应最晚的记录)
  • 合并两个处理后的子集,可按需恢复原数据顺序

代码实现

import pandas as pd

# 示例数据初始化
data = {
    'Id': [1,3,4,4,1,3,4,4,1,3,3,4,1,3,4],
    'Day': [2,2,2,2,2,2,2,2,3,3,3,3,3,3,3],
    'Hour': [5,5,6,7,14,14,14,15,5,5,6,7,14,14,15],
    'In/Out': ['in','in','in','in','out','out','out','out','in','in','in','in','out','out','out']
}
df = pd.DataFrame(data)

# 拆分in和out子集
df_in = df[df['In/Out'] == 'in']
df_out = df[df['In/Out'] == 'out']

# 处理in组:保留每组首行
df_in_processed = df_in.drop_duplicates(subset=['Id', 'Day', 'In/Out'], keep='first')

# 处理out组:保留每组末行
df_out_processed = df_out.drop_duplicates(subset=['Id', 'Day', 'In/Out'], keep='last')

# 合并结果并按原索引排序
final_df = pd.concat([df_in_processed, df_out_processed]).sort_index()

print(final_df)

输出结果

Id  Day  Hour In/Out
0    1    2     5     in
1    3    2     5     in
2    4    2     6     in
4    1    2    14    out
5    3    2    14    out
7    4    2    15    out
8    1    3     5     in
9    3    3     5     in
10   3    3     6     in
11   4    3     7     in
12   1    3    14    out
13   3    3    14    out
14   4    3    15    out

该结果完全匹配示例中标记的保留/移除规则:in类型的重复组保留首行,out类型的重复组保留末行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:22:44