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

如何筛选同一日期下含不同城市记录的ID对应的DataFrame数据?

问题:筛选同一日期下存在多城市记录的ID对应数据子集

示例输入DataFrame

IDDATECITY
ABC2022-07-08AAA
ABC2022-07-22BBB
XYZ2022-07-09CCC
XYZ2022-07-09YYY
PQR2022-09-22FFF
PQR2022-09-26EEE
EFG2022-10-03AAA
EFG2022-10-16KKK
EFG2022-10-16PPP
EFG2022-10-16QQQ

期望输出

IDDATECITY
XYZ2022-07-09CCC
XYZ2022-07-09YYY
EFG2022-10-16KKK
EFG2022-10-16PPP
EFG2022-10-16QQQ

解决方案(Pandas实现)

方法1:使用groupby + filter

直接按ID和DATE分组,筛选出每组内CITY唯一值数量大于1的分组数据:

import pandas as pd

# 构造示例数据
data = {
    'ID': ['ABC', 'ABC', 'XYZ', 'XYZ', 'PQR', 'PQR', 'EFG', 'EFG', 'EFG', 'EFG'],
    'DATE': ['2022-07-08', '2022-07-22', '2022-07-09', '2022-07-09', 
             '2022-09-22', '2022-09-26', '2022-10-03', '2022-10-16', '2022-10-16', '2022-10-16'],
    'CITY': ['AAA', 'BBB', 'CCC', 'YYY', 'FFF', 'EEE', 'AAA', 'KKK', 'PPP', 'QQQ']
}
df = pd.DataFrame(data)

# 筛选目标数据
result = df.groupby(['ID', 'DATE']).filter(lambda x: x['CITY'].nunique() > 1)
print(result)

方法2:先标记有效分组再合并

先计算每个(ID, DATE)组合的城市唯一值数量,再筛选出符合条件的组合,最后和原数据合并:

import pandas as pd

# 构造示例数据
data = {
    'ID': ['ABC', 'ABC', 'XYZ', 'XYZ', 'PQR', 'PQR', 'EFG', 'EFG', 'EFG', 'EFG'],
    'DATE': ['2022-07-08', '2022-07-22', '2022-07-09', '2022-07-09', 
             '2022-09-22', '2022-09-26', '2022-10-03', '2022-10-16', '2022-10-16', '2022-10-16'],
    'CITY': ['AAA', 'BBB', 'CCC', 'YYY', 'FFF', 'EEE', 'AAA', 'KKK', 'PPP', 'QQQ']
}
df = pd.DataFrame(data)

# 计算每个分组的城市唯一值数量
city_counts = df.groupby(['ID', 'DATE'])['CITY'].nunique().reset_index(name='city_count')
# 获取符合条件的(ID, DATE)组合
valid_groups = city_counts[city_counts['city_count'] > 1][['ID', 'DATE']]
# 合并得到结果
result = pd.merge(df, valid_groups, on=['ID', 'DATE'])
print(result)

两种方法都能输出符合要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:35:41