如何在Pandas中统计多行指定列的唯一值数量?
解决方案:统计多行合并后前6列的唯一值总数
首先构造符合需求的示例DataFrame(每行前6列含3个唯一值):
import pandas as pd data = { 'col1': [1, 4, 7, 10], 'col2': [1, 4, 7, 10], 'col3': [2, 5, 8, 11], 'col4': [2, 5, 8, 11], 'col5': [3, 6, 9, 12], 'col6': [3, 6, 9, 12], 'other_col': ['a', 'b', 'c', 'd'] } df = pd.DataFrame(data) # 你已实现的每行唯一值统计 df['count'] = df.iloc[:, 0:6].nunique(axis=1)
要实现每两行合并统计前6列唯一值总数并生成count2rows列,可以通过分组+自定义聚合的方式实现:
# 按每两行分组,计算每组前6列的唯一值总数 df['count2rows'] = df.groupby(df.index // 2).apply( lambda group: group.iloc[:, 0:6].values.flatten().nunique() ).reindex(df.index // 2).values
代码说明:
df.index // 2:将索引按每2个一组划分(0&1为组0,2&3为组1,以此类推),如果需要N行一组,替换为df.index // N即可。group.iloc[:, 0:6].values.flatten():把每组的前6列数据扁平化为一维数组,方便统计跨多行的唯一值。reindex(df.index // 2):将每组的统计结果映射回原DataFrame的每一行,确保同组的行共享同一个统计值。
执行后示例DataFrame的count2rows列会全部显示为6,符合两行合计6个唯一值的需求。
内容的提问来源于stack exchange,提问作者ManOnTheMoon
相关产品推荐
相关产品推荐

