2017-03-14 3 views
0

私はプログラミングとPythonの初心者です。私が持っているリストのリストデータは次のようになります。pythonのリストのリストで冗長データの平均を行う方法は?

    year,month,date_of_month,day_of_week,births 
combine_list = [[2003, 12, 29, 1, 13125], 
       [2003, 12, 30, 2, 14700], 
       [2003, 12, 31, 3, 12540], 
       [2003, 12, 30, 2, 14700], 
       [2003, 12, 30, 2, 14438], 
       .......................]] 

として、2番目のを見ることができ、第四及び第五のエントリは、出生を除くすべてのフィールドに同じ値を持ちます。私は、冗長データを持つエントリの意味を見つけるために関数を書かれている:

def distinct(file) : 
     distinct_data = file 
     for i in range(len(file)) : 
      for j in range(i+1,len(file)) : 
       if (i[0]==j[0] and i[1]==j[1] and i[2]==j[2] and i[3]==j[3]) : 
        disctinct_data = (i+j)/2 
     return (distinct_data) 

distinctdata = distinct(combine_list) 

しかし、通訳は私にエラーがスローされます:

TypeErrorTraceback (most recent call last) 
    <ipython-input-19-70e5f515fb64> in <module>() 
      7  return (distinct_data) 
      8 
    ----> 9 distinctdata = distinct(combine_list) 
     10 
     11 

    <ipython-input-19-70e5f515fb64> in distinct(file) 
      3  for i in range(len(file)) : 
      4   for j in range(i+1,len(file)) : 
    ----> 5    if (i[0]==j[0] and i[1]==j[1] and i[2]==j[2] and i[3]==j[3]) : 
      6     disctinct_data = (i+j)/2 
      7  return (distinct_data) 

    TypeError: 'int' object is not subscriptable 

してください、私の関数が間違っているところを教えて、何私が行うことができますそれを修正してください。

+0

iとjは単なる整数です。リストのリストをチェックするためにcombined_list [i] [0] == combined_list [j] [0]のようなものを使いたいとします。 –

+0

あなたのやり方ではなく、辞書を使って要素をキーとして保存する必要があります。リストはキーとして格納することはできないので、リストをタプルにパックしてキーとして保存する必要があります。 – lordingtar

+0

@Divyesh 'i'と 'j'はどちらも整数変数であり、リストではありません。 'file [i]、file [j]'のようなデータにアクセスする必要があります。 – CaptainTrunky

答えて

0

あなたはあなたが私はあなたが参照した構文エラーを修正し

import pandas as pd 

df = pd.DataFrame([[2003, 12, 29, 1, 13125], 
       [2003, 12, 30, 2, 14700], 
       [2003, 12, 31, 3, 12540], 
       [2003, 12, 30, 2, 14700], 
       [2003, 12, 30, 2, 14438]], columns = ['year','month','date_of_month','day_of_week','births']) 

df[df.duplicated(subset = ['year','month','date_of_month','day_of_week'])].mean() 
0

使用して平均値を見つけることができるような操作パンダでhttp://pandas.pydata.org/pandas-docs/stable/10min.html

のためのパンダを使用する必要があります。要素インデックスを配列として扱っていました。

combine_list = [[2003, 12, 29, 1, 13125], 
       [2003, 12, 30, 2, 14700], 
       [2003, 12, 31, 3, 12540], 
       [2003, 12, 30, 2, 14700], 
       [2003, 12, 30, 2, 14438]] 

def distinct(file) : 
    distinct_data = file 
    print(file) 
    for i in range(len(file)) : 
     for j in range(i+1,len(file)) : 
      if (file[i][:3] == file[j][:3]) : 
       disctinct_data = (i+j)/2 
    return (distinct_data) 

distinctdata = distinct(combine_list)