【发布时间】:2019-11-17 02:08:35
【问题描述】:
使用这样的数据集
df = pd.DataFrame(np.random.randint(0,5,size=(20, 3)), columns=['user_id','module_id','week'])
我们经常看到这种模式:
df.groupby(['user_id'])['module_id'].count().to_frame().reset_index().rename({'module_id':'count'}, axis='columns')
但是我们从
得到完全相同的结果df.groupby(['user_id'])['module_id'].count().reset_index(name='count')
(注意,我们需要在前者中添加额外的rename,因为Series (here) 上的reset_index 包含name 参数并返回一个数据帧,而DataFrame (here) 上的reset_index 包含不包括name 参数。)
先用to_frame有什么好处吗?
(我想知道它是否可能是熊猫早期版本的人工制品,但这看起来不太可能:
-
Series.reset_index于 2012 年 1 月 27 日添加到 this commit。 -
Series.to_frame于 2013 年 10 月 13 日添加到 this commit。
所以Series.reset_index 在Series.to_frame 之前一年多可用。)
【问题讨论】:
-
我总是采用第二种方法。以前从未见过第一个模式...您要使用 to_frame() 的唯一原因是在获取数据帧时保持 seires 索引。在reset_index之前使用没有意义
-
我认为不需要第一种方法。
.to_frame()通常用于将系列转换为数据帧,这里 reset_index() 已经为您完成了。但是我更喜欢groupby().size()而不是计数(它更快的 IMO)
标签: pandas