groupby麻烦转换为标量索引

时间:2019-10-12 15:32:26

标签: python pandas pandas-groupby

我有一个数据框df,其中包含以下列:

id                  int64
quarter    datetime64[ns]
decile              int64
dtype: object

当我运行分组方式时,

df.groupby(['id', 'quarter'])

我收到以下错误:

TypeError: only integer scalar arrays can be converted to a scalar index

我认为正确的问题是:dtypes的输出没有告诉我,以便实际上我可以将intdatetime用作索引?

versions:
pandas: 0.25.1
python: sys.version_info(major=3, minor=7, micro=3, releaselevel='final', serial=0)

有关该错误的其他观察结果:如果我避免事先重命名列,该错误就会消失。当我运行dtypes方法时,确认重命名成功。

最后,这是groupby并重命名后出现的同一错误的另一个示例(在此示例中,重命名很愚蠢,但是当我在聚合中包含date时是必需的;我仅显示产生错误所需的最低代码)

# resample to quarterly
quart = df.groupby(
[pd.Grouper(key='id'),
 pd.Grouper(key='date', freq='Q')]).agg({'call_qty':'sum'})

quart.columns = [['call_qty']]  # << toggle this renaming code to trigger the error

F = quart['call_qty'].isna()

产生错误:

TypeError: only integer scalar arrays can be converted to a scalar index

感谢任何可能对此有所了解的人。

1 个答案:

答案 0 :(得分:0)

我试图重现您的错误,但没有成功。

我创建为的源DataFrame:

   id    quarter  decile
0   1 2019-01-01       5
1   1 2019-01-01       6
2   2 2019-04-01       1
3   2 2019-04-01       2
4   2 2019-07-01       3
5   2 2019-07-01       4

(具有您所描述的 dtype )。

我尝试将单独分组,就像您在评论中声明的那样:

gr = df.groupby(['id', 'quarter'])

没有错误

为了测试结果,我计算了每组的平均值:

gr.mean()

获取:

               decile
id quarter           
1  2019-01-01     5.5
2  2019-04-01     1.5
   2019-07-01     3.5

作为另一项测试,我打印了每组的内容:

for key, grp in gr:
    print(f'\nGroup: {key}\n{grp}')

获取:

Group: (1, Timestamp('2019-01-01 00:00:00'))
   id    quarter  decile
0   1 2019-01-01       5
1   1 2019-01-01       6

Group: (2, Timestamp('2019-04-01 00:00:00'))
   id    quarter  decile
2   2 2019-04-01       1
3   2 2019-04-01       2

Group: (2, Timestamp('2019-07-01 00:00:00'))
   id    quarter  decile
4   2 2019-07-01       3
5   2 2019-07-01       4

因此,如您所见,使用“正常”(如上所示)源数据不会发生错误。

也许您有 Python Pandas 的某些旧版本? 升级到当前版本并重复测试。