2017-04-11 9 views
1

は、私はこの1つのようなリストをしました:Pythonのパンダ:サブリストのリスト:総アイテム数

各アレイは前の手紙に属し
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([ 12994, 1262824, 145854, 92469]), b -> array([273300]), 'a' -> array([1431689, 30655043, 1739919]) and so on...

したがって、各文字の合計項目数を取得できますか? の要望:

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

すべての提案を歓迎

答えて

1
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 

  • :以下のコードを参照してください。だから私は、私はtuplesのリストや発電機にdictを使用している場合、それは魔法のようにキーを持つ辞書にそれを向けるだろう辞書

    [ ...... for x in catgories_list] 
    
  • で各サブリストを解析し、何かを......に記入しなければなりませんタプルの最初の値とタプルの2番目の値としての値。

    dict(...list of tuples...) 
    
  • zip私が各サブリストでは、私のキーは偶数インデックス[0, 2, 4...]と値であることを知っているtuples

    zip(list one, list two) 
    
  • の発電機を与える奇数インデックス[1, 3, 5, ...]

    であります
    # even odd 
    zip(x[::2], x[1::2]) 
    
  • しかし、x[1::2]はアレイであり、I配列を必要としません。私は配列の長さが必要です。

    # even      odd 
    zip(x[::2], [len(y) for y in x[1::2]]) 
    
  • pandas.DataFrameは、辞書のリストを取得し、データフレームを作成します。

  • 最後に、sumを使用して長さを数えます。

+0

ご説明いただきありがとうございます。piRSquared – nickerox

0

ある私は(それぞれのキーabcを持っている)、カラム0, 2, 4のグループキーを順にgroupbyを使用し、その後に個別の項目番号の数を数えます次の列。この場合のグループ内の番号は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]]

関連する問題