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

如何在Pandas DataFrame中处理列间多值对应关系:查询对应行、统计数量及输出分组结果

嘿,我来帮你搞定这两个Pandas数据处理任务!先把你提供的示例数据转换成Pandas DataFrame方便操作:

import pandas as pd

data = {
    'A': [1, 2, 3, 1, 1, 2, 3],
    'B': ['cat', 'dog', 'rat', 'horse', 'cat', 'bird', 'rat']
}
df = pd.DataFrame(data)

任务1:查找A列取值对应B列有多个不同值的所有行

咱们可以分两步高效完成:

  1. 先定位A列中那些对应的B列存在多个唯一值的分组
  2. 用这些A值去筛选原DataFrame,得到所有符合条件的行

代码实现如下:

# 第一步:获取A列中对应B列有多个不同值的取值
multi_value_A = df.groupby('A')['B'].nunique()[lambda x: x > 1].index

# 第二步:筛选出这些A值对应的所有行
result_rows = df[df['A'].isin(multi_value_A)]
print(result_rows)

运行后会输出符合要求的行:

A      B
0  1    cat
3  1  horse
4  1    cat
1  2    dog
5  2   bird

任务2:统计符合条件的A值数量并输出对应关系

先统计数量,再遍历每个符合条件的A值,收集对应的B列唯一值,最后按你要的格式输出:

# 统计A列中对应B列有多个不同值的取值数量
count = len(multi_value_A)
print(f"符合条件的A值数量:{count}")

# 遍历输出指定格式的对应关系
for a_val in multi_value_A:
    # 获取当前A值对应的B列唯一值并转为字符串格式
    b_unique_vals = ', '.join(df[df['A'] == a_val]['B'].unique())
    print(f"{a_val}对应{b_unique_vals}")

运行后会输出:

符合条件的A值数量:2
1对应cat, horse
2对应dog, bird

补充小技巧

如果你的数据量较大,想用更简洁的方式标记符合条件的行,可以用transform直接在原DataFrame添加标记列:

# 给每行标记是否属于"A值对应多B值"的分组
df['has_multi_B'] = df.groupby('A')['B'].transform(lambda x: x.nunique() > 1)
# 直接筛选标记为True的行
result_rows = df[df['has_multi_B']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 22:08:11