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

Python:按列值特异性对Pandas DataFrame按ID分组

找出分组后各ID的特异性列

先构造你提供的数据集:

import pandas as pd

data = {
    'id': ['A', 'B', 'C', 'C', 'B', 'C', 'A'],
    '1': [10, 20, 30, 30, 50, 30, 50],
    '2': [40, 60, 15, 15, 100, 15, 100],
    '3': [80, 70, 50, 20, 70, 20, 10],
    '4': [12, 77, 20, 45, 77, 80, 12],
    '5': [50, 60, 60, 43, 32, 21, 50]
}
df = pd.DataFrame(data)

方法一:分组计算并列出特异性列

核心思路是按ID分组后,统计每个列在组内的唯一值数量,唯一值数量为1的列就是该ID的特异性列:

# 分组统计每列的唯一值数量
unique_counts = df.groupby('id').nunique()

# 筛选每个ID对应的特异性列
specific_cols = unique_counts.apply(lambda x: x[x == 1].index.tolist(), axis=1)

# 打印结果
for id_val, cols in specific_cols.items():
    print(f"ID '{id_val}' 的特异性列:{cols}")

运行输出:

ID 'A' 的特异性列:['4', '5']
ID 'B' 的特异性列:['3', '4']
ID 'C' 的特异性列:['1', '2']

方法二:可视化展示特异性列

用热力图可以直观呈现各ID的特异性列分布,需要用到seaborn库:

import seaborn as sns
import matplotlib.pyplot as plt

# 转换为二进制矩阵(1表示是特异性列,0表示不是)
heatmap_data = unique_counts == 1

# 绘制热力图
plt.figure(figsize=(8, 4))
sns.heatmap(heatmap_data, annot=True, cmap='YlGnBu', cbar=False, fmt='d')
plt.title("各ID的特异性列分布")
plt.xlabel("列名")
plt.ylabel("ID")
plt.show()

生成的热力图中,标记为1的单元格即为对应ID的特异性列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:51:16