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)
Run Code Online (Sandbox Code Playgroud)
变量tt的值如图所示
我的问题是为什么 tt 有两列“日期”,以及如何避免第二列“日期”?
第一个是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
Run Code Online (Sandbox Code Playgroud)
我想你想要这个:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5004 次 |
| 最近记录: |