我有下面的代码,通过海运创建一个表格和柱状图。
#Building a dataframe grouped by the # of Engagement Types
sales_type = sales.groupby('# of Engagement Types').sum()
#Calculating the % of people who bought the course by # engagement types
sales_type['% Sales per Participants'] = round(100*(sales_type['Sales'] / sales_type['Had an Engagement']), 2)
#Calculating the # of people who didn't have any engagements
sales_type.set_value(index=0, col='Had an Engagement', value=sales[sales['Had an Engagement']==0].count()['Sales'])
#Calculating the % of sales for those who didn't have any engagements
sales_type.set_value(index=0, col='% Sales per Participants',
value=round(100 * (sales_type.ix[0, 'Sales'] /
sales[sales['Had an Engagement']==0].count()['Sales']),2))
#Setting the graph image
fig, (ax1) = plt.subplots(nrows=1, ncols=1, figsize=(12,4))
sns.set_style("whitegrid")
# Ploting the histagram for the % of total prospects
ax1 = sns.barplot(x=sales_type.index,y='% Sales per Participants', data=sales_type ,ax=ax1)
ax1.set(ylabel = '%')
ax1.set_title('% Sales per Participants By # of Engagement Types')
#present the table
sales_type.xs(['Had an Engagement', 'Sales','% Sales per Participants'],axis=1).transpose()
#sales_type
我对其他参数使用了相同的代码概念,没有问题。但是,有一个参数出现了错误:“值错误:“”的分组器不是一维的”行代码:
ax1 = sns.barplot(x=sales_type.index,y='% Sales per Participants', data=sales_type ,ax=ax1)
尽管 Dataframe 没有多个维度,但仍会发生此错误。
这是表格的标题:
Sales Pre-Ordered / Ordered Book \
# of Engagement Types
0 1.0 0.0
1 20.0 496.0
2 51.0 434.0
3 82.0 248.0
4 71.0 153.0
5 49.0 97.0
6 5.0 24.0
Opted In For / Clicked to Kindle Viewed PLC \
# of Engagement Types
0 0.0 0
1 27034.0 5920
2 6953.0 6022
3 1990.0 1958
4 714.0 746
5 196.0 204
6 24.0 24
# of PLC Engagement Viewed Webinar \
# of Engagement Types
0 0.0 0
1 6434.0 1484
2 7469.0 1521
3 2940.0 1450
4 1381.0 724
5 463.0 198
6 54.0 24
# of Webinars (Live/Replay) \
# of Engagement Types
0 0.0
1 1613.0
2 1730.0
3 1768.0
4 1018.0
5 355.0
6 45.0
OCCC Facebook Group Member Engaged in Cart-Open \
# of Engagement Types
0 0.0 0
1 148.0 160
2 498.0 1206
3 443.0 967
4 356.0 511
5 168.0 177
6 24.0 24
# of Engagement at Cart Open Had an Engagement \
# of Engagement Types
0 0.0 3387
1 189.0 35242
2 1398.0 8317
3 1192.0 2352
4 735.0 801
5 269.0 208
6 40.0 24
Total # of Engagements % Sales per Participants
# of Engagement Types
0 0.0 0.03
1 35914.0 0.06
2 18482.0 0.61
3 8581.0 3.49
4 4357.0 8.86
5 1548.0 23.56
6 211.0 20.83
这是完整的错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-211-f0185fe64c1a> in <module>()
12 sns.set_style("whitegrid")
13 # Ploting the histagram for the % of total prospects
---> 14 ax1 = sns.barplot(x=sales_type.index,y='% Sales per Participants', data=sales_type ,ax=ax1)
15 ax1.set(ylabel = '%')
16 ax1.set_title('% Sales per Participants By # of Engagement Types')
ValueError: Grouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensional
我试着在互联网和堆栈溢出中搜索这个错误,但是没有结果。有人知道发生了什么吗?
6条答案
按热度按时间2g32fytz1#
简化问题
我也遇到过这个问题,发现是由重复的列名引起的。
要重新创建此对话框:
就像许多隐含的panda错误一样,这个错误也是因为两列同名。
确定要使用哪一列,重命名或删除另一列,然后重做操作。
溶液
按如下方式重命名列
ni65a41a2#
简单示例:如果要按"职业"对一群人进行分组,那么一个人要么是"工程师",要么是"技术人员",不能两者兼而有之,否则
groupby()
就不知道该把这个人归到"技术人员"组还是"工程师"组。你的代码,不幸的是分配给一些人同时进入 * 工程 * 和 * 技术 *。
首先,只是为了确保我们 * 真正 * 了解
groupby()
的功能。我们将使用下面显示的 * fruit *
df
示例:观察以下非常有效的
df.groupby()
,偏离典型使用:等等,
groupby()
甚至根本没有使用"水果"或"颜色"?!没错!
groupby()
不需要关心df
或"fruit"或"color"或Nemo,groupby()
只关心一件事,一个查找表,它告诉它哪个索引属于哪个组。在这种情况下,例如,传递到
groupby()
的字典指示groupby()
:如果您看到索引
11
,那么它就是"mine"
,请将具有该索引行放入名为"mine"
的组中。如果您看到索引
22
,则它是"mine"
,将具有该索引行放入名为"mine"
的组中。...
即使0和1不在
df.index
中也不是问题常规的
df.groupby('fruit')
或df.groupby(df['fruit'])
完全遵循上述规则,列df['fruit']
用作查找表,它告诉groupby()
索引11
是"apple"
现在,关于:"Pandas.核心.框架.数据框架"〉"的分组器不是一维的
它实际上是在说:
for some or all indexes in df, you are assigning MORE THAN just one label
[x]
df.groupby(df)
将无法工作,您为groupby()
提供了一个2DMap,每个索引被指定了2个组名。is index 11 an "apple" or an "r"? make up your mind!
[x]下面的代码也不起作用。虽然现在的Map是1D的,但它将索引
11
Map到"mine"
以及"yours"
。Pandas的df
和sr
允许非唯一索引,所以要小心。vh0rcniy3#
当我不小心创建了MultiIndex列时,我遇到了这种情况:
ibrsph3r4#
在@w-m的回答中添加一些内容。
如果要将多个列从一个 Dataframe 添加到另一个 Dataframe :
它将创建一个多列索引,如果您试图按
df1
上任何内容进行分组,它将给予此错误。要解决此问题,请使用以下方法消除多索引
hyrbngr75#
当我使用df而不是pd时,发生了以下情况:
代替
pqwbnv8z6#
首先更正列名来解决此问题,输入时列名可能不是一维列表。您可以执行以下操作: