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

基于多数据框列表按行生成频率表的技术咨询

看起来你需要处理一组包含20个DataFrame的列表,为每个k对应的行生成频率表对吧?我给你整理了R和Python两种常用工具的解决方案,直接就能上手:

用R处理(依赖tidyverse工具链)

假设你的20个DataFrame已经存在列表df_list里,咱们一步步来:

  1. 先把所有DataFrame合并成一个大表
    把分散的DF合并后,后续统计会方便很多,还能标记每行来自哪个原始DF:

    library(dplyr)
    library(purrr)
    
    # 合并列表里的所有DF,添加df_id列标记来源
    combined_df <- bind_rows(df_list, .id = "df_id")
    
  2. 为每个k生成h的频率表(DataFrame格式)
    如果你的需求是统计每个k值下,不同h标签在20个DF里的出现次数和占比,用这段代码就能得到一个列表,每个元素对应一个k的频率表:

    k_freq_tables <- combined_df %>%
      group_by(k) %>%
      group_split() %>%
      map(~ .x %>%
            count(h, name = "frequency") %>%
            mutate(percentage = frequency / sum(frequency) * 100))
    

    比如k_freq_tables[[1]]就是k=85对应的频率表,包含h标签、出现次数、百分比。

  3. 如果需要矩阵形式的频率表
    要是你偏好矩阵格式,只需要在统计后转个格式就行:

    k_freq_matrices <- combined_df %>%
      group_by(k) %>%
      group_split() %>%
      map(~ .x %>%
            count(h, name = "frequency") %>%
            mutate(percentage = frequency / sum(frequency) * 100) %>%
            column_to_rownames("h") %>%
            as.matrix())
    

用Python处理(依赖pandas)

如果你习惯用Python,同样的逻辑可以这样实现:

  1. 合并所有DataFrame

    import pandas as pd
    
    # df_list是你的20个DataFrame组成的列表
    combined_df = pd.concat(df_list, keys=range(len(df_list)), names=["df_id", "row_idx"]).reset_index(drop=True)
    
  2. 生成每个k的频率表(DataFrame格式)
    写个小函数来统计每组的频率,再用字典存储每个k对应的结果:

    def generate_freq_table(group):
        freq = group["h"].value_counts().reset_index()
        freq.columns = ["h", "frequency"]
        freq["percentage"] = freq["frequency"] / freq["frequency"].sum() * 100
        return freq
    
    # 键是k值,值是对应频率表
    k_freq_tables = {k: generate_freq_table(group) for k, group in combined_df.groupby("k")}
    
  3. 转成矩阵形式
    想要矩阵的话,直接把DataFrame转成矩阵即可:

    k_freq_matrices = {k: table.set_index("h").values for k, table in k_freq_tables.items()}
    

小提醒

  • 如果你的频率表是针对value列的分布(比如每个k对应的value的频数),只需要把代码里的h替换成value就行。
  • 要是原始DataFrame的列名有排版问题(比如你示例里表头和行内容不匹配),记得先把每个DF的列统一调整为k, h, value三列再处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:24:16