2017-11-06 18 views
-1

을 수행합니다 :중첩 된 목록에서 요소의 발생을 계산하고, 난 정말이</p> <p>하자를 설명 I는 다음과 같습니다 중첩 된 목록을 가지고 말을하는 방법을 모르기 때문에 제목은 가지 오해의 소지가 계산

이 중첩 된 목록에서
a = [[1234,'1/8/2014'],[4123,'1/3/2014'],[5754,'1/12/2014'],[8548,'11/8/2014'],[9469,'11/9/2013'],[3564,'1/8/2013']] 

, 2014 년 4 개 목록 및 년 2013

2 개 목록 나는 매년 값의 평균을 얻으려면이 있습니다. 2014 년을 위해, 내가 원하는 그래서 나는 매년 합계를 평균해야하기 때문에,

(1234 + 4123 + 5754 + 8548)/4 

과 2013 년에

,

(9469 + 3564)/2 

나는 매년 발생을 얻을 필요가있다. 끝에 , 나는

new = [[4914.75, '2014'],[6516.5, '2013']] 

이 날짜에없는 것을 유의하시기 바랍니다, 뭔가를 원하는 '01// 2014 03 ',하지만 단지'2014년 1월 3일은 '

어떻게이 수행 할 수 있습니다 ?

+0

이 @StefanPochmann 예, 나는이 "파이썬"을보고 싶다 그것을하는 코드 –

+0

@StefanPochmann 잘, 나는 그것을 쓰는 법을 모른다. 그리고 그것이 내가 여기 묻는 이유이다. –

+0

날짜를 반환하는 키 함수를 사용하여 정렬; itertools.griupby를 사용하여 항목을 그룹화하십시오. 그룹의 값을 합산한다. 그룹 길이로 나눕니다. – wwii

답변

1

위의 응답 작품과 당신이 팬더를 사용하여 편안하지 않은 경우, 당신이 하나를 참조 할 수 있습니다.

a = [[1234,'1/8/2014'],[4123,'1/3/2014'],[5754,'1/12/2014'],[8548,'11/8/2014'],[9469,'11/9/2013'],[3564,'1/8/2013']] 

data = {} 
result = [] 
for item in a: 
    year = item[1].split('/')[-1] 
    data[year] = data.get(year, []) + [item[0]] 

for key in data.keys(): 
    items = data.get(key) 
    avg = sum(items)/len(items) 
    result.extend([key, avg]) 

print(result) 
1

팬더를 사용하면이 작업을 수행 할 수 있습니다.

import pandas as pd 

a = [[1234,'1/8/2014'],[4123,'1/3/2014'],[5754,'1/12/2014'],[8548,'11/8/2014'],[9469,'11/9/2013'],[3564,'1/8/2013']] 

df = pd.DataFrame(a) 

df[1] = pd.to_datetime(df[1]) 

df = df.set_index(1) 

df.groupby(df.index.year.astype(str)).mean()\ 
    .reset_index().values.tolist() 

출력 :

[['2013', 6516.5], ['2014', 4914.75]] 
0

이 시도 (이것은 내부 목록의 길이가 2의 항상과 가정 2 한 날짜입니다) :

from collections import defaultdict 

cumulatives = defaultdict(int) 
counts = defaultdict(int) 
for (amount, dt) in a: 
    key = dt[-4:] 
    cumulatives[key] += amount 
    counts[key] += 1.0 

output = [[cumulatives[key]/counts[key], key] for key in cumulatives.keys()] 
print(output)