You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何统计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():统计当前列中每个值的出现次数,返回一个Series
  • col.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

火山引擎 最新活动