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有两栏“日期”,以及如何避免第二栏“日期”?
的数据
4条答案
按热度按时间yh2wf1be1#
第一个是
groupby
'date',第二个是index
'date'。改变周围的东西-这一次
groupby
股票:字符串
我觉得你想要这个:
型
gorkyyrv2#
我遇到了同样的问题,并确定了一个解决方案,虽然不清楚它是否适用于这里,因为问题中引用的代码会返回一个错误。无论如何,这里是一个玩具示例的设置:
字符串
首先,在DataFrame构造函数中不包含您选择的索引:
型
如果你的groupby函数是在一个列上操作,应该返回一个错误。由于某些原因,多个列它不会。在这种情况下,你会得到一个没有重复的多索引返回。
然而,在这里,我们看到的是一个列,包含了索引指针,很明显得到了一个重复的索引。结果证明解决方案是返回一个Series而不是Dataframe:
型
现在,groupby.apply不会返回重复的索引:
型
由于DataFrame的每一行本身都是一个系列,并且您的目标是为每组返回一行,因此这是有意义的。
2o7dmzc53#
另一种方法是在groupby中设置
as_index = False
,即:字符串
这将返回:
型
查看Pandas documentation了解详细信息。
bxgwgixi4#
当我使用
level
到groupby
和MultiIndex
DataFrame
时,也会发生这种情况。修复:使用
group_keys=False
标志。默认情况下,V2.0.0
为True
:字符串