Pandas Pivot_表为Pivot表中未使用的列生成键错误

Pandas Pivot_表为Pivot表中未使用的列生成键错误,pandas,dataframe,pandas-groupby,Pandas,Dataframe,Pandas Groupby,我正在从数据框创建透视表,其中包含混合的列,如文本、数字、日期和时间。 我能够成功地将文件读入dataframe,并能够处理一些groupby操作。基于此,我尝试创建透视表,该表按周对数据进行分组,并根据一些标准统计数据的某些出现次数。但是,Pivot_表为Pivot表中未使用的列保留了Keyerror 这是我的数据框: H1 H2 H3 H4 H5 H6 H7 H8 H10 RA2 RB2, H2 202

我正在从数据框创建透视表,其中包含混合的列,如文本、数字、日期和时间。
我能够成功地将文件读入dataframe,并能够处理一些groupby操作。基于此,我尝试创建透视表,该表按周对数据进行分组,并根据一些标准统计数据的某些出现次数。但是,Pivot_表为Pivot表中未使用的列保留了Keyerror

这是我的数据框:

H1      H2        H3            H4      H5    H6    H7    H8    H10
RA2   RB2, H2    2020-07-25    11:30   60    1774   RG2   RH2   RJ2
RA3   RB3, H2    2020-07-25    11:30   60    1791   RG3   RH3   RJ3
RA4   RB4, H2    2020-07-25    11:30   35    1806   RG4   RH4   RJ4
RA5   RB1, H3    2020-07-25    12:30   35    1771   RG5   RH5   RJ5
RA6   RB2, H3    2020-07-25    12:45   60    1813   RG6   RH6   RJ6
RA7   RB3, H3    2020-07-25    13:00   60    1789   RG7   RH7   RJ7
RA8   RB4, H3    2020-07-25    13:00   60    1790   RG8   RH8   RJ8
RA9   RB1, H4    2020-07-25    13:00   60    1808   RG9   RH9   RJ9
RA10  RB2, H4    2020-07-25    14:00   60    1822   RG10  RH10  RJ10
以下是我的失败代码:

            pivot = pd.pivot_table(df, index=['H1', pd.Grouper(key='H3', freq='W-MON')], columns='H10',\
            margins=True, aggfunc={'H10':np.count_nonzero}).reset_index()
我得到的错误如下:

Function: createPivot Raised:  'H2'
我被这个问题困扰了一个星期,无法摆脱它。我也在SO上发布了另一篇与此相关的帖子,但无法得到任何答案

所以如果我能得到一些专家的意见,我真的很感激


非常感谢您的帮助和考虑。

透视表将尝试将所有列作为数据帧中的
值使用,除非您明确设置它们。因此,在
aggfunc
参数中查看字典时,它会尝试查找每个剩余列的聚合函数,而不仅仅是H10

但是,在您的示例中,即使您显式地将H10指定为
,您也会遇到一个问题,即尝试对
参数使用相同的列,这会使'H10'的
分组不是一维的
错误

您最好使用
pd.crosstab

pd.crosstab(
    index=[df['H1'],  df['H3']],
    values=df['H10'], columns=df['H10'],
    margins=True,  aggfunc=np.count_nonzero)

H10              RJ10  RJ2  RJ3  RJ4  RJ5  RJ6  RJ7  RJ8  RJ9  All
H1   H3                                                           
RA10 2020-07-25   1.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    1
RA2  2020-07-25   NaN  1.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN    1
RA3  2020-07-25   NaN  NaN  1.0  NaN  NaN  NaN  NaN  NaN  NaN    1
RA4  2020-07-25   NaN  NaN  NaN  1.0  NaN  NaN  NaN  NaN  NaN    1
RA5  2020-07-25   NaN  NaN  NaN  NaN  1.0  NaN  NaN  NaN  NaN    1
RA6  2020-07-25   NaN  NaN  NaN  NaN  NaN  1.0  NaN  NaN  NaN    1
RA7  2020-07-25   NaN  NaN  NaN  NaN  NaN  NaN  1.0  NaN  NaN    1
RA8  2020-07-25   NaN  NaN  NaN  NaN  NaN  NaN  NaN  1.0  NaN    1
RA9  2020-07-25   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  1.0    1
All  NaT          1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0    9


我不确定透视表的用途是什么,因为它没有预期的输出,但如果您想简单地对其进行聚合,可以使用
df.groupby('H3')['H10'].transform(np.count\u nonzero)