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

如何在Pandas DataFrame中按特定规则提取唯一行?

Pandas按特定规则提取唯一行的解决方案

原始数据

我们有如下Pandas DataFrame:

import pandas as pd
df = pd.DataFrame(
    {
        "ID": [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4],
        "color": ["red","blue","green","yellow","red","blue","green","yellow","red","blue","green","yellow","red","blue","green","yellow"]
    }
)

每个ID对应red、blue、green、yellow四种颜色,需要提取的目标结果为:ID1对应red、ID2对应blue、ID3对应green、ID4对应yellow。

无效尝试

使用df.drop_duplicates()按单一列去重无法满足需求:

  • 按ID去重:df.drop_duplicates("ID"),结果所有ID对应的颜色均为red;
  • 按color去重:df.drop_duplicates("color"),结果所有颜色对应的ID均为1;
    keep参数仅能反转保留的首个/尾个值,无法实现自定义匹配规则。

可行解决方案

方案一:分组循环提取

这是初始想到的较繁琐实现方式:

series = []
for i, (_, sub) in enumerate(df.groupby("ID")):
    series.append(sub.iloc[i])

out = pd.concat(series, axis=1).transpose().reset_index(drop=True)

方案二:匹配元组筛选

更简洁高效的实现,适合ID和color列唯一值长度相等的场景:

zipped = zip(df["ID"].unique(), df["color"].unique())
mask = df[["ID", "color"]].agg(tuple, 1).isin(zipped)

df[mask]

注:zip会以最短序列为准,但在本场景中ID和color的唯一值长度始终相等,因此无需顾虑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:20:12