如何统计DataFrame各列中最后一行值的出现次数并返回列表
解决方法:统计DataFrame各列最后一行值的出现次数
针对你的需求,我整理了两种简洁且高效的实现方式,都能准确得到你想要的结果列表:
方法1:使用apply逐列处理(直观易懂)
这种方法通过apply遍历每一列,对每一列单独统计最后一行值的出现次数,代码可读性很强:
import pandas as pd # 初始化你的DataFrame df = [[1, 2, 3, 4], [1, 3, 4, 2], [2, 2, 4, 1], [1, 2, 3, 4], [3, 4, 4, 2], [1, 3, 4, 1]] df = pd.DataFrame(df) # 生成结果列表 result = df.apply(lambda col: col.value_counts()[col.iloc[-1]]).tolist() print(result) # 输出:[4, 2, 4, 2]
代码解释:
df.apply(lambda col: ...):对DataFrame的每一列执行lambda函数col.value_counts():统计当前列中每个值的出现次数,返回一个Seriescol.iloc[-1]:获取当前列最后一行的值,用它作为key从value_counts的结果中取出对应计数.tolist():把最终的Series结果转换成列表格式
方法2:向量化运算(性能更优)
如果你的DataFrame数据量较大,推荐使用这种向量化方法,它避免了逐列循环,利用pandas的广播机制大幅提升效率:
import pandas as pd df = [[1, 2, 3, 4], [1, 3, 4, 2], [2, 2, 4, 1], [1, 2, 3, 4], [3, 4, 4, 2], [1, 3, 4, 1]] df = pd.DataFrame(df) # 获取最后一行的所有值 last_values = df.iloc[-1].values # 逐列统计等于对应最后一行值的元素数量 counts = (df == last_values).sum().tolist() print(counts) # 输出:[4, 2, 4, 2]
代码解释:
df.iloc[-1].values:提取DataFrame最后一行的数值,得到一个numpy数组df == last_values:利用广播特性,将每一列的所有元素和该列最后一行的值比较,生成一个布尔值的DataFrame(True表示元素等于最后一行值).sum():对每一列的布尔值求和(True等价于1,False等价于0),得到每列目标值的出现次数.tolist():将结果转换为列表格式
两种方法都能得到你期望的[4, 2, 4, 2],根据你的数据规模选择合适的方式即可~
内容的提问来源于stack exchange,提问作者Scott Woodhall




