2014-07-11 2 views
4

방금 ​​지하수 우물 데이터를 분석하기 위해 판다를 사용하기 시작했습니다.Python의 팬더를 사용하여 빈으로 평균값 찾기

site_no avg 1960-end1964 count avg 1965-end1969 count avg 1970-end1974 count 
: 나는 5 년 단위로하고, 카운트 비닝 평균 아니라 수준의 출력을 원하는

485438103132901 19800417 -7.1 

485438103132901 19800506 -6.8 

483622101085001 19790910 -6.7 

485438103132901 19790731 -6.2 

483845101112801 19801111 -5.37 

484123101124601 19801111 -5.3 

485438103132901 19770706 -4.98 

: 텍스트 파일에서

내 데이터 (site_no, 날짜, well_level)처럼 보인다

names = ['site_no','date','wtr_lvl'] 
df = pd.read_csv('D:\info.txt', sep='\t',names=names) 

내가 사이트로 전체 평균 w를 찾을 수 있습니다

내가 가진 데이터를 읽고있다 i 번째 :

avg = df.groupby(['site_no'])['wtr_lvl'].mean().reset_index() 

내 원유 빈 시도

사용 :

a1 = df[df.date > 19600000] 
a2 = a1[a1.date < 19650000] 
avga2 = a2.groupby(['site_no'])['wtr_lvl'].mean() 

내 질문 : 어떻게 내가 원하는대로 표시 할 결과가 가입 할 수 있습니까? 병합, 결합 및 추가를 시도했지만 빈 데이터 프레임을 허용하지 않습니다 (발생). 또한 날짜별로 데이터를 저장하는 간단한 방법이 있다고 확신합니다. 감사.

답변

5

가장 간결한 방법은 아마도 이것을 0으로 변환하는 것입니다. , 또는

In [75]: 

print df 
         ID Level 
1         
1980-04-17 485438103132901 -7.10 
1980-05-06 485438103132901 -6.80 
1979-09-10 483622101085001 -6.70 
1979-07-31 485438103132901 -6.20 
1980-11-11 483845101112801 -5.37 
1980-11-11 484123101124601 -5.30 
1977-07-06 485438103132901 -4.98 
In [76]: 

df.Level.resample('60M', how='mean') 
#also may consider different time alias: '5A', '5BA', '5AS', etc: 
#see: http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases 
Out[76]: 
1 
1977-07-31 -4.980 
1982-07-31 -6.245 
Freq: 60M, Name: Level, dtype: float64 

당신은 cut과 함께 groupby을 사용할 수 있습니다 : 12,329,데이터와 그들 수단을 얻기 위해 다운 샘플링

In [99]: 

print df.groupby(pd.cut(df.index.year, pd.date_range('1960', periods=5, freq='5A').year, include_lowest=True)).mean() 
         ID  Level 
[1960, 1965]   NaN  NaN 
(1965, 1970]   NaN  NaN 
(1970, 1975]   NaN  NaN 
(1975, 1980] 4.847632e+14 -6.064286 

을 또한 ID로 :

In [100]: 

print df.groupby(['ID', 
        pd.cut(df.index.year, pd.date_range('1960', periods=5, freq='5A').year, include_lowest=True)]).mean() 
           Level 
ID         
483622101085001 (1975, 1980] -6.70 
483845101112801 (1975, 1980] -5.37 
484123101124601 (1975, 1980] -5.30 
485438103132901 (1975, 1980] -6.27 
+0

각 기간별 사이트 별 평균치가 있습니까? 감사. – user3830166

+0

그래, 그 경우에는'groupby'를 사용하십시오. edit –

+0

그럴 겁니다! 감사! – user3830166

0

그래서이 둥근 빈 번호가 별도의 열 생성됩니다 뭘하려는 : 쓰레기통 자체

df.groupby('bin').mean() 

다른 참고하여 다음

bin_width = 50000 
    mult = 1./bin_width 
    df['bin'] = np.floor(ser * mult + .5)/mult 

, 단지 그룹을 여러 할 수 한 번에 진리 평가 :

df[(df.date > a) & (df.date < b)] 
+0

나는 이것을을 줄 것이다 시험. 감사. – user3830166

관련 문제