2017-08-11 1 views
0

Pythonで条件付きsum-productを実行しようとしています。次のように単純化されたアイデアは、次のとおりです。Itertools Groupbyが異なる列でループする

A = [1 1 2 3 3 3] 
B = [0.50 0.25 0.99 0.80 0.70 0.20] 

私は出力

Total1 = 0.50*1 + 0.25*1 
Total2 = 0.99*2 
Total3 = 0.80*3 + 0.70*3 + 0.20*3 

として持っていたいと思い、ここ以上の人々による支援のおかげで、この部分は働きました!

私が追加したい次の関数は、(B1、B2、B3、...)(異なる値を使って)異なる列 'B'に対してこれを計算することができます。 これらはExcelに格納されており、openpyxlを使用して別のリストに読み込んでいます(より効率的かもしれません...) これは、B1/B2/...の値がAのそれぞれの値に対応していることを意味します。

number = -1 
j = 0 
for col in ws.iter_cols(): 
    if col[3].value == "fast" : 
     number = j 
    j+=1 

B1 = [row[number].value for row in ws.iter_rows(min_row=5, max_row=63332) ] 
B1_float = [float(i) for i in B1] 

は異なる組み合わせにthisスクリプトを実行する方法(& B1/B2 &/& B3/...)があり、行列に格納しますか? (またはファイルをExcelに)

私はそれが私の言いたいことは明らかですが、私に教えてください!

+0

「openpyxl」を使用して、これらの異なる値がどのように格納または反復されるかを追加することを忘れないでください。私。どのように列を取得して受け取るのですか? – MSeifert

+0

[OK]を、私はさらに説明する編集:) –

答えて

1

は、あなたが2つの質問が求めている表示されます。

    これらはかなり異なっていたよう

をExcelファイルにこれらの結果を書く別のリスト

  • からグループに基づいた製品の
  • 計算和問題は、私は最初に言及し、2番目の参照を参照します。

    import operator as op 
    import itertools as it 
    import functools as ft 
    
    
    A = [1, 1, 2, 3, 3, 3] 
    B = [0.5, 0.25, 0.99, 0.8, 0.7, 0.2] 
    
    groups = [list(g) for k, g in it.groupby(zip(A, B), op.itemgetter(0))] 
    groups 
    # [[(1, 0.5), (1, 0.25)], [(2, 0.99)], [(3, 0.8), (3, 0.7), (3, 0.2)]] 
    

    ここでは、データの列をジップし、リストAに従ってグループ化します。今度はgroupsの各反復可能文字に適切な演算子を適用できます。 Excelにデータを書き込むためのよう

    [sum(ft.reduce(op.mul, i) for i in sub) for sub in groups] 
    # [0.75, 1.98, 5.1] 
    

    、利用可能several Python librariesはこれを行う方法についてのドキュメントと、それぞれがあります。

  • 関連する問題