Pandas系列groupby with one group

2024-10-03 00:29:05 发布

您现在位置:Python中文网/ 问答频道 /正文

输入:

import pandas as pd
data = pd.DataFrame(data={'date':[pd.Timestamp('2016-02-15')]*3, 
    'time':[pd.Timedelta(x) for x in ('07:30:00','10:10:00','11:10:00')],'name':['A']*3, 'N':[1,2,3]}
).set_index(['date','time','name']).sort_index()
data = data[ data.index.get_level_values('time')>=pd.to_timedelta('09:30:00') ]
dataGB = data['N'].groupby(['date','name'])
print(data)
print('Number of groups:',len(dataGB))
print(dataGB.sum())
print(pd.__version__)

输出:

^{pr2}$

问题:

  1. 为什么我有两组,而显然只有一组?在
  2. 为什么我从dataGB.sum()获取垃圾,以及如何获得预期的(下面)结果?在

预期结果为dataGB.sum()

>>> dataGB.sum()
date        name
2016-02-15  A       5
Name: N, dtype: int64

谢谢你的帮助!在


Tags: nameimportdataframepandasdatadateindextime
2条回答

这可能是一个带有pd.Series.groupby的bug,我将在pandas中为此案例提交一个bug报告。在

解决方法#1使用pd数据帧而不是pd系列在

data[['N']].groupby(['date','name']).sum()

输出:

^{pr2}$

“按工作级别使用”参数

data['N'].groupby(level=[0,2]).sum()

输出:

date        name
2016-02-15  A       5
Name: N, dtype: int64

解决方法3使用带有聚合器列的数据帧:

 data.groupby(['date', 'name'])['N'].sum()

输出:

date        name
2016-02-15  A       5
Name: N, dtype: int64

根据这篇文章,Python Pandas - how to do group by on a multiindex,对多索引的分组应该是这样的

dataGB = data['N'].groupby(level=[0,2]) 

相关问题 更多 >