我想从以下带有列sales
,的数据框中创建数据透视表rep
。数据透视表显示,sales
但不显示rep
。当我只用尝试时rep
,我得到了错误DataError: No numeric types to aggregate
。如何解决此问题,使我同时看到数字字段sales
和字段(字符串)rep
data = {'year': ['2016', '2016', '2015', '2014', '2013'],
'country':['uk', 'usa', 'fr','fr','uk'],
'sales': [10, 21, 20, 10,12],
'rep': ['john', 'john', 'claire', 'kyle','kyle']
}
print pd.DataFrame(data).pivot_table(index='country', columns='year', values=['rep','sales'])
sales
year 2013 2014 2015 2016
country
fr NaN 10 20 NaN
uk 12 NaN NaN 10
usa NaN NaN NaN 21
print pd.DataFrame(data).pivot_table(index='country', columns='year', values=['rep'])
DataError: No numeric types to aggregate
您可以使用set_index
和unstack
:
df = pd.DataFrame(data)
df.set_index(['year','country']).unstack('year')
产量
rep sales
year 2013 2014 2015 2016 2013 2014 2015 2016
country
fr None kyle claire None NaN 10.0 20.0 NaN
uk kyle None None john 12.0 NaN NaN 10.0
usa None None None john NaN NaN NaN 21.0
或者,pivot_table
与配合使用aggfunc='first'
:
df.pivot_table(index='country', columns='year', values=['rep','sales'], aggfunc='first')
产量
rep sales
year 2013 2014 2015 2016 2013 2014 2015 2016
country
fr None kyle claire None None 10 20 None
uk kyle None None john 12 None None 10
usa None None None john None None None 21
使用aggfunc='first'
, 通过获取找到的第一个值对每个(country, year, rep)
或(country, year, sales)
组进行聚合。在您的情况下,似乎没有重复项,因此第一个值与唯一的值相同。
问题内容: 我对某些分组代码有疑问,我敢肯定一旦运行(在较早的熊猫版本上)。在0.9上,我 没有数字类型来汇总 错误。有任何想法吗? 问题答案: 您如何生成数据? 看看输出如何显示您的数据是“对象”类型的?groupby操作首先专门检查每一列是否为数字dtype。 看↑ 您是否先初始化了一个空的DataFrame然后填充了它?如果是这样,这可能就是为什么它会像0.9之前的新版本一样更改的原因,将空
问题内容: 关于此错误,有很多问题,但是环顾四周之后,我仍然无法找到解决方案的想法。我正在尝试使用字符串旋转数据框架,以使一些行数据变为列,但到目前为止还没有解决。 我的df的形状 样本格式 我想转向的是 当 问题 值将成为列,与 response_answer 它是的相应数列,并保留IDS 我尝试过的 DataError:没有要聚合的数字类型 用字符串值旋转数据框的方法是什么? 问题答案: in
问题内容: 枢轴,伙计…我只是想念它。也许是因为我没有做汇总。哎呀,也许枢轴不是做到这一点的方法。感觉应该很简单,但这让我感到困惑。 假设我有这个: 我怎样才能将这两个记录取回: 就此问题而言,需要注意的几点 我 从来没有 打算要回两个以上的记录 我总是会取回整数,但 我不知道它们会是什么 。 问题答案: 您可以实现运算符: 参见带有演示的SQL Fiddle
问题内容: 在MySQL中,我观察到尽管没有GROUP BY子句,但在SELECT列表中使用AGGREGATE FUNCTION的语句被执行了。如果这样做,其他RDBMS产品(例如SQL Server)将引发错误。 例如,被执行而没有任何错误,并返回col1,col2的第一行值和col3的所有值之和。以上查询的结果是一行。 谁能告诉我为什么MySQL会发生这种情况? 提前致谢!! 问题答案: 这是
问题内容: 我有这样的表… 我想要这个… 使用PIVOT可以做到吗? 问题答案: 您可以使用MAX聚合,它将仍然有效。一个值的最大值=该值。 在这种情况下,您还可以在customerid上自我连接5次,并按每个表引用按dbColumnName进行过滤。它可能会更好。
请考虑以下情况: 我如何在类图上表示< code>A和< code>B之间的关系?如果< code>B只保存一个< code>A(而不是一个数组),我会使用组合/聚合,但是在这种情况下,我不确定应该做什么。非常感谢你的帮助!