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
相关产品推荐
相关产品推荐

