如何在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列有多个不同值的所有行
咱们可以分两步高效完成:
- 先定位A列中那些对应的B列存在多个唯一值的分组
- 用这些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
相关产品推荐
相关产品推荐

