이유

2016-08-15 5 views
3
def afun(group): 
    aa=len(group) 
    group.sort_values(inplace=True) 

    return pandas.DataFrame({'score':numpy.arange(aa),'price':group}) 



df = pandas.DataFrame({ 
       'stock':numpy.repeat(['AAPL','GOOG','YHOO'], 3), 
       'date':numpy.tile(pandas.date_range('5/5/2015', periods=3, freq='D'), 3), 
       'price':(numpy.random.randn(9).cumsum() + 10) , 
       'price2':(numpy.random.randn(9).cumsum() + 10)}) 
df = df.set_index(['stock','date']) 
agroupDf=df.groupby(level='date') 



tt=agroupDf['price'].apply(afun) 

변수 TT의 값이 TT는 두 개의 열 '날짜'를 가지고, 어떻게 secend 열 '날짜'를 피하기 위해 왜이유

내 질문은 그림에 표시됩니다 중복 수준 돌아 groupby.apply?

enter image description here

+1

한 날짜 인덱스, 하나 열입니다. 심지어 팬더에게 날짜를 기준으로 색인을 만들도록 요청했습니다. – sascha

+1

주식 및 날짜 열을 인덱스 – maxymoo

+0

@maxymoo로 설정 한 후에 해당 주식 및 날짜 열을 삭제하려는 것일 수 있습니다. 이유는 무엇입니까? – Merlin

답변

1

첫 번째는 groupby '날짜'이다. 두 번째 것은 index의 '날짜'입니다. 주위

변화하는 것 -이 시간 groupby 재고 :

df  = df.set_index(['date','stock']) 
agroupDf = df.groupby(level='stock') 

tt=agroupDf['price'].apply(afun) 
tt 


          price score 
stock date  stock     
AAPL 2015-05-05 AAPL 9.333143  0 
     2015-05-06 AAPL 9.680022  1 
     2015-05-07 AAPL 9.870889  2 
GOOG 2015-05-06 GOOG 10.030032  0 
     2015-05-05 GOOG 10.229084  1 
     2015-05-07 GOOG 10.571631  2 
YHOO 2015-05-07 YHOO 9.996925  0 
     2015-05-05 YHOO 10.342180  1 
     2015-05-06 YHOO 10.586120  2 

난 당신이 원하는 생각 :

df  = df.set_index('stock') 
agroupDf = df.groupby('date') 

tt=agroupDf['price'].apply(afun) 
tt 

          price score 
date  stock     
2015-05-05 AAPL 10.414396  0 
      GOOG 12.608225  1 
      YHOO 12.830496  2 
2015-05-06 AAPL 10.428767  0 
      GOOG 11.189663  1 
      YHOO 11.988177  2 
2015-05-07 YHOO 11.202677  0 
      AAPL 11.274440  1 
      GOOG 11.780654  2