2017-06-12 7 views
0

python listを使って要素をグループ化し、グループ番号を平均化する方法は? 私はリストを持っています[1_1 34 1_1 45 1_1 78 2_1 33 2_1 12 3_2 78 3_1 90 1_3 65 1_2 98 1_3 62 1_3 54 1_3 48 1_3 28 1_2 21 1_2 35]最初の要素はグループ名で、2番目の要素は数字です。 [1_1 34 1_1 45 1_1 78 1_2 21 1_2 35 1_3 62 .....] [1_1 52.3 1_2 28 1_3 34 .........などのグループ分けで平均化する方法]python listを使って要素をグループ化し、グループ番号を平均化する方法は?

あなた

OKを感謝し、私はこのことについて少しを明確にしましょう。私はテスト結果をこのように見て、それらをグループ化し、各グループの平均を表示するためにPythonを使いたいと思います。ありがとうございました。

1_1 32 1_1 13 1_1 13 1_1 31 1_3 13 1_1 35 1_2 41 1_1 19 1_2 64 1_3 23 1_2 23 1_2 22 1_2 67 1_2 41 1_3 40 1_1 35 1_2 20 1_2 35 1_3 69 1_2 67 1_3 68 1_1 21 1_3 70 1_3 23 1_3 47 1_3 38 1_3 67 1_3 13 1_2 13 1_2 22 1_3 22 1_3 35 1_3 14 1_3 68 1_2 67 1_3 65 1_3 13 1_3 41 1_3 67 1_3 22 1_3 67 1_2 22 1_2 42 1_2 13 1_3 66 1_3 68 1_3 67 1_2 66 1_3 13 1_3 68 1_2 39

+7

これまでに試したことはありますか? – pramod

+0

あなたは辞書を使うことができ、各キーに応じて平均を見つけることができます。 –

+0

コード作成サービスではないので、この質問をオフトピックとして閉じることにしました –

答えて

0

indexes=['1_1','1_1','1_1','2_1','2_1','3_2','3_1','1_3','1_2','1_3','1_3','1_3','1_3','1_2','1_2'] 
values=[34,45,78,33,12,78,90,65,98,62,54,48,28,21,35] 

グループ化はパンダ

import pandas as pd 
で楽しいです言うことができます

インデックスを持つデータフレームを作成し、

df=pd.DataFrame(values,columns=["values"],index=indexes) 

は現在のインデックスをGROUPBYと

df.groupby(df.index).mean() 

結果がどのように見える意味ですか:私はその後、以下のコードは、あなたが必要なものを与え、かなり神託である必要があり、正しく質問を理解仮定し

 values 
1_1  52.333333 
1_2  51.333333 
1_3  51.400000 
2_1  22.500000 
3_1  90.000000 
3_2  78.000000 
+0

まあ、これはとても役に立ちます。 df.groupby(df.index).mean()。to_csv( "/ home/jim/test.csv"、sep = '、')を追加してcsvファイルに出力します。それはありがとうございます! – user8149657

0

ここでは、将来のすべての操作を可能にする方法でそれらをソートし、保存するには、2つの可能なアプローチです:最初のタプルの

EITHERリストは、 itemはグループ名であり、2番目の項目は要素です。このアプローチは、すべてのアイテムの「一般的な並べ替え」を可能にするという利点があります。タプルのリストに、基本的なリストからそこに取得するには次の操作を行います。キーはグループ名と値であり、リスト、と

initial_list = ['1_1', 12, '1_2', 23....] 
tuple_list = [(initial_list[i], initial_list[i + 1]) for i in xrange(0, len(initial_list), 2)] 

OR辞書は要素を持つリストです。あなたはグループの値の統計(合計、平均値など)を行いたい場合は、このアプローチは、より柔軟である:

initial_list = ['1_1', 12, '1_2', 23....] 
dict_with_lists = {} 
for i in xrange(0, len(initial_list), 2): 
    group_name = initial_list[i] 
    if group_name in dict_with_lists: 
     dict_with_lists[group_name].append(initial_list[i + 1]) 
    else: 
     dict_with_lists[group_name] = [initial_list[i + 1]] 
+0

@ PM2Ringは、あなたのために働いていないものを正確に指摘します。 (initial_listに残っている明白なエリプシスは別として) – lesingerouge

+0

おっと!アンダースコアは現在合法的であることを忘れていました。申し訳ありません。 –

+0

@ PM2Ringよく、あなたは実際にはかなり正しいので、この方法で編集するのが理にかかります(Python 3.6は実際にはうまく広がっていません)。 – lesingerouge

0

。私は、 'key'が文字列(すなわち、"1_1")であり、値が整数であると仮定しました。

from itertools import groupby 
from operator import itemgetter 

theList = ["1_1", 34, "1_1", 45, "1_1", 78, "2_1", 33, "2_1", 12, "3_2", 78, "3_1", 90, "1_3", 65, "1_2", 98, "1_3", 62, "1_3", 54, "1_3", 48, "1_3", 28, "1_2", 21, "1_2", 35] 

paired = sorted(zip(theList[::2], theList[1::2]), key=itemgetter(0)) 
grouped = {a: [q[1] for q in b] for a, b in groupby(paired, key=itemgetter(0))} 
print {a: sum(b)/float(len(b)) for a, b in grouped.iteritems()} 

を生成し:次いでによってそれらをソート

{'3_1': 90.0, '3_2': 78.0, '2_1': 22.5, '1_3': 51.4, '1_2': 51.333333333333336, '1_1': 52.333333333333336} 

これは最初の2つの要素のタプルの新しいリストに元のリストをzip圧縮することによって動作(i番目とiは1番目一緒にペア+)タプルのペアの第一の要素によって、その後のグループにこれらを

[('1_1', 34), ('1_1', 45), ('1_1', 78), ('1_2', 98), ('1_2', 21), ('1_2', 35), ('1_3', 65), ('1_3', 62), ('1_3', 54), ('1_3', 48), ('1_3', 28), ('2_1', 33), ('2_1', 12), ('3_1', 90), ('3_2', 78)] 

をしています第二の要素のリストを構成する:

を与えるタプルのペアの第一要素
{'3_1': [90], '3_2': [78], '2_1': [33, 12], '1_3': [65, 62, 54, 48, 28], '1_2': [98, 21, 35], '1_1': [34, 45, 78]} 

最後に、最終結果を示す各キーのリストの項目の平均値が表示されました。

関連する問題