Pandas中.groupby()返回的DataFrame为何包含重复order_dow列?
Pandas groupby后列重复的问题解决
你的问题是因为用groupby('order_dow')分组后,又对order_dow列做了计数聚合,导致分组键变成了DataFrame的索引,同时聚合结果的列名也是order_dow,所以看起来列“出现了两次”。下面给你几种快速解决的办法:
方法1:用size()直接统计数量
size()会直接返回分组后的元素个数,结果是一个Series,之后转成你要的DataFrame结构:
dow_counts = df.groupby('order_dow').size().reset_index(name='counts')
执行后会得到7行2列的结果:一列是order_dow(值为0-6),另一列counts是对应日期的出现次数。
方法2:重置索引并重命名聚合列
如果习惯用count(),可以在聚合后重置索引,同时给结果列改个名字避免重复:
dow_counts = df.groupby('order_dow')['order_dow'].count().reset_index(name='counts')
reset_index()会把原来的索引(order_dow)转成普通列,name='counts'把聚合后的列名改成counts,就不会和索引列重复了。
方法3:对其他非空列计数
如果你的数据里有其他不会为空的列(比如订单ID列order_id),可以直接对这列计数,这样就不会出现列名重复的情况:
dow_counts = df.groupby('order_dow')['order_id'].count().reset_index(name='counts')
以上任意一种方法都能得到你期望的2列(日期+次数)、7行的DataFrame。
内容的提问来源于stack exchange,提问作者Dimitris Frenzel
相关产品推荐
相关产品推荐

