【问题标题】:DataFrame from list of list列表列表中的数据框
【发布时间】:2017-07-09 00:26:09
【问题描述】:

我有列表列表

u=[[1, 1], [2, 1, 1, 1], [2, 2, 1, 1, 1, 1, 2, 2], [2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2], [2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2]]

我想使用 pandas 创建一个 DataFrame,其中行由 u 的长度索引,列由该列表列表中的数字组给出。

我希望这个 DataFrame 的元素是元素出现的频率。例如,从上面,我想得到下表

在上表中,1 列表示每个列表中的个数,而 2 表示 2 的个数。在单元格 (1,1) 中,数字 2 是通过计算第一个列表中的个数获得的是 [1,1]。在单元格 (2,1) 中,数字 3 是通过计算列表 [2,1,1,1] 中的数量获得的,而在单元格 (2,2) 中,数字二是通过计算两个的频率获得的在列表 [2,1,1,1] 中,始终重复相同的过程。

我知道要计算列表中重复元素的数量,我必须使用 count。例如 [1,1,1,2].count(1)=3 我想知道的是使用 Pandas 以便我得到上面的 DataFrame。可以这样做吗?

【问题讨论】:

    标签: python list pandas dataframe


    【解决方案1】:

    您可以使用Counter 将列表转换为字典。然后使用pd.DataFrame 转换那个字典

    import pandas as pd
    from collections import Counter
    df = pd.DataFrame([Counter(u_) for u_ in u]).fillna(0)
    

    注意这里没有 4,您可以手动将其添加到字典中,或者只是在数据框中添加 4 列,即df[4] = 0

    【讨论】:

      【解决方案2】:

      collections.Counter 很有用:

      首先从列表中创建Counter 实例并使用这些实例化DataFrame:

      u=[[1, 1], [2, 1, 1, 1], [2, 2, 1, 1, 1, 1, 2, 2], [2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2], [2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2]]
      from collections import Counter
      import pandas as pd
      df = pd.DataFrame([Counter(e) for e in u]).fillna(0)
      df[4] = 0.0
      print(df)
      

      输出

         1     2    3    4
      0  2   0.0  0.0  0.0
      1  3   1.0  0.0  0.0
      2  4   4.0  0.0  0.0
      3  5  10.0  1.0  0.0
      4  6  20.0  6.0  0.0
      

      这是可能的,因为在后台 Counter 的行为类似于 dict

      【讨论】:

        猜你喜欢
        • 2011-06-18
        • 2012-01-18
        • 1970-01-01
        • 2023-01-17
        • 2017-10-04
        • 2018-02-05
        • 2023-01-04
        • 2013-01-15
        • 2020-09-13
        相关资源
        最近更新 更多