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)
。