Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:子列表列表:项目总数_Python_Pandas - Fatal编程技术网

python:子列表列表:项目总数

python:子列表列表:项目总数,python,pandas,Python,Pandas,我有一张这样的清单: categories_list = [ ['a', array([ 12994, 1262824, 145854, 92469]), 'b', array([273300]), 'c', array([341395, 32857711])], ['a', array([ 356424311, 165573412, 2032850784]), 'b', array([2848105, 228835]), 'c', a

我有一张这样的清单:

categories_list = [
    ['a', array([ 12994, 1262824, 145854,  92469]),
     'b', array([273300]),
     'c', array([341395, 32857711])],
    ['a', array([ 356424311,  165573412, 2032850784]),
     'b', array([2848105, 228835]),
     'c', array([])],
    ['a', array([1431689, 30655043, 1739919]),
     'b', array([597, 251911, 246600]),
     'c', array([35590])]
]
其中每个数组都属于前面的字母。 例如:
a->array([12994126282414585492469])、b->array([273300])、'a'->array([1431689306550431739919])等等……

那么,是否可以检索每个字母的项目总数? 德西德拉塔:

----------
a      10
b       6
c       3

欢迎所有建议

我使用
groupby
对列
0、2、4
中的键进行分组(分别有
a
b
c
),然后在下一列中计算不同项目编号的数量。在这种情况下,组中的数字是
len(set(group))
(或者
len(group)
,如果只需要组的总长度)。请参阅下面的代码:

from itertools import groupby, chain

count_distincts = []
cols = [0, 2, 4]
for c in cols:
    for gid, group in groupby(categories_list, key=lambda x: x[c]):
        group = list(chain(*[list(g[c + 1]) for g in group]))
        count_distincts.append([gid, len(set(group))])
输出
[[a',10],[b',6],[c',3]

pd.DataFrame(
    [dict(zip(x[::2], [len(y) for y in x[1::2]])) for x in categories_list]
).sum()

a    10
b     6
c     3
dtype: int64

  • 我的目标是创建一个字典列表。因此,我必须在
    中填入一些东西,用字典解析每个子列表

    [ ...... for x in catgories_list]
    
  • 如果我在
    元组的列表或生成器上使用
    dict
    ,它会神奇地将其转换为一个字典,其中键作为元组中的第一个值,值作为元组中的第二个值

    dict(...list of tuples...)
    
  • zip
    将为我提供
    元组的生成器

    zip(list one, list two)
    
  • 我知道,在每个子列表中,我的键位于偶数索引
    [0,2,4…]
    ,值位于奇数索引
    [1,3,5…]

    #   even    odd
    zip(x[::2], x[1::2])
    
  • 但是
    x[1::2]
    将是数组,我不想要数组。我想要数组的长度

    #   even                     odd
    zip(x[::2], [len(y) for y in x[1::2]])
    
  • pandas.DataFrame
    将获取字典列表并创建数据帧

  • 最后,使用
    sum
    计算长度


非常感谢您的详细解释,piRSquared