首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >长到宽格式的多索引熊猫

长到宽格式的多索引熊猫
EN

Stack Overflow用户
提问于 2017-11-08 03:44:15
回答 1查看 4.8K关注 0票数 4

我有一个像这样的数据文件:

代码语言:javascript
运行
AI代码解释
复制
data.head()
Out[2]: 
        Area Area Id                  Variable Name Variable Id  Year  \
0  Argentina       9  Conservation agriculture area        4454  1982   
1  Argentina       9  Conservation agriculture area        4454  1987   
2  Argentina       9  Conservation agriculture area        4454  1992   
3  Argentina       9  Conservation agriculture area        4454  1997   
4  Argentina       9  Conservation agriculture area        4454  2002   
     Value Symbol Md  
0      2.0            
1      6.0            
2    500.0       

Variable Name是列,AreaYear是索引,Value是值。对我来说最直观的方法是使用:

代码语言:javascript
运行
AI代码解释
复制
data.pivot(index=['Area', 'Year'], columns='Variable Name', values='Value)

然而,我得到了错误:

代码语言:javascript
运行
AI代码解释
复制
Traceback (most recent call last):
  File "C:\Users\patri\Miniconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-4-4c786386b703>", line 1, in <module>
    pd.concat(data_list).pivot(index=['Area', 'Year'], columns='Variable Name', values='Value')
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\frame.py", line 3853, in pivot
    return pivot(self, index=index, columns=columns, values=values)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 377, in pivot
    index=MultiIndex.from_arrays([index, self[columns]]))
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\series.py", line 250, in __init__
    data = SingleBlockManager(data, index, fastpath=True)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\internals.py", line 4117, in __init__
    fastpath=True)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\internals.py", line 2719, in make_block
    return klass(values, ndim=ndim, fastpath=fastpath, placement=placement)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\internals.py", line 1844, in __init__
    placement=placement, **kwargs)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\internals.py", line 115, in __init__
    len(self.mgr_locs)))
ValueError: Wrong number of items passed 119611, placement implies 2

我该怎么解释呢?我也尝试过另一种方法:

代码语言:javascript
运行
AI代码解释
复制
data.set_index(['Area', 'Variable Name', 'Year']).loc[:, 'Value'].unstack('Variable Name')

试图获得相同的结果,但我得到了以下错误:

代码语言:javascript
运行
AI代码解释
复制
Traceback (most recent call last):
  File "C:\Users\patri\Miniconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-5-222325ea01e1>", line 1, in <module>
    pd.concat(data_list).set_index(['Area', 'Variable Name', 'Year']).loc[:, 'Value'].unstack('Variable Name')
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\series.py", line 2028, in unstack
    return unstack(self, level, fill_value)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 458, in unstack
    fill_value=fill_value)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 110, in __init__
    self._make_selectors()
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 148, in _make_selectors
    raise ValueError('Index contains duplicate entries, '
ValueError: Index contains duplicate entries, cannot reshape

数据有问题吗?我已经确认在dataframe的任何行中都没有AreaVariable NameYear的重复组合,所以我认为不应该有任何重复的条目,但我可能错了。考虑到这两种方法目前都不起作用,我如何从长格式转换为宽格式?我检查了答案herehere,但这两种情况都涉及到某种I型聚合。

我尝试过像这样使用pivot_table

代码语言:javascript
运行
AI代码解释
复制
data.pivot_table(index=['Area', 'Year'], columns='Variable Name', values='Value')

但是,我认为正在进行某种类型的聚合,数据集中有许多缺失的值,这导致了这个错误:

代码语言:javascript
运行
AI代码解释
复制
Traceback (most recent call last):
  File "C:\Users\patri\Miniconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-7-77b28d2f0dbb>", line 1, in <module>
    pd.concat(data_list).pivot_table(index=['Area', 'Year'], columns='Variable Name', values='Value')
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\reshape\pivot.py", line 136, in pivot_table
    agged = grouped.agg(aggfunc)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\groupby.py", line 4036, in aggregate
    return super(DataFrameGroupBy, self).aggregate(arg, *args, **kwargs)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\groupby.py", line 3468, in aggregate
    result, how = self._aggregate(arg, _level=_level, *args, **kwargs)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\base.py", line 435, in _aggregate
    **kwargs), None
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\base.py", line 391, in _try_aggregate_string_function
    return f(*args, **kwargs)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\groupby.py", line 1037, in mean
    return self._cython_agg_general('mean', **kwargs)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\groupby.py", line 3354, in _cython_agg_general
    how, alt=alt, numeric_only=numeric_only)
  File "C:\Users\patri\Miniconda3\lib\site-packages\pandas\core\groupby.py", line 3425, in _cython_agg_blocks
    raise DataError('No numeric types to aggregate')
pandas.core.base.DataError: No numeric types to aggregate
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-08 03:46:41

我认为您需要先将列Value转换为数字,然后将pivot_table与默认聚合函数mean一起使用。

代码语言:javascript
运行
AI代码解释
复制
#if all float data saved as strings
data['Value'] = data['Value'].astype(float)
#if some bad data like strings and first method return value error
data['Value'] = pd.to_numeric(data['Value'], errors='coerce')
代码语言:javascript
运行
AI代码解释
复制
data.pivot_table(index=['Area', 'Year'], columns='Variable Name', values='Value')

或者:

代码语言:javascript
运行
AI代码解释
复制
data.groupby(['Area', 'Variable Name', 'Year'])[ 'Value'].mean().unstack('Variable Name')
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47178861

复制
相关文章
【Hive】从长格式表到宽格式表的转换
使用sql代码作分析的时候,几次遇到需要将长格式数据转换成宽格式数据,一般使用left join或者case when实现,代码看起来冗长,探索一下,可以使用更简单的方式实现长格式数据转换成宽格式数据。
1480
2019/05/22
2.4K0
联合索引(多列索引)[通俗易懂]
联合索引是指对表上的多个列进行索引,联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2.
全栈程序员站长
2022/09/05
2.6K0
Elasticsearch——多索引的使用
在Elasticsearch中,一般的查询都支持多索引。 只有文档API或者别名等不支持多索引操作,因此本篇就翻译一下多索引相关的内容。 首先,先插入几条数据: $ curl -XPOST localhost:9200/test1/test/1 -d '{"name":"test1"}' $ curl -XPOST localhost:9200/test1/test/2 -d '{"name":"test1"}' $ curl -XPOST localhost:9200/test2/test/1 -
用户1154259
2018/01/17
9040
MySQL索引中的前缀索引和多列索引
正确地创建和使用索引是实现高性能查询的基础,本文笔者介绍MySQL中的前缀索引和多列索引。
玖柒的小窝
2021/11/06
4.5K0
Elasticsearch多索引
 在Elasticsearch中,一般的查询都支持多索引。 只有文档API或者别名API等不支持多索引操作,因此本篇就翻译一下多索引相关的内容。 首先,先插入几条数据: $ curl -XPOST localhost:9200/test1/test/1 -d '{"name":"test1"}' $ curl -XPOST localhost:9200/test1/test/2 -d '{"name":"test1"}' $ curl -XPOST localhost:9200/test2/test/
用户1174963
2018/01/17
1.8K0
Elasticsearch多索引
深入Python数据分析:数据由长格式变为宽格式
melt()的逆操作在Pandas中对应为 pivot(),它也是一个设计上的顶层函数,工程位置如下:
double
2019/05/27
1.4K0
RGB格式详解(二)----RGB索引格式
关于调色板,可以简单理解为通过编号映射到颜色的一张二维表。如01索引,表示红色。采用索引格式的RGB,红色的像素对应存储的值便是索引01.
视界音你而不同
2020/04/10
1.6K0
「Mysql索引原理(五)」多列索引
很多人对多列索引的理解都不够。一个常见的错误就是,为每个列创建独立的索引,或者按照错误的顺序创建多列索引。
源码之路
2020/09/04
4.4K0
「Mysql索引原理(五)」多列索引
MongoDB 多键索引
更多参考 MongoDB 单键(列)索引 MongoDB 复合索引 MongoDB执行计划获取(db.collection.explain())
Leshami
2018/08/13
1.7K0
MongoDB 多键索引
mysql 创建 主键索引 唯一索引 全文索引 多列索引 添加索引
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
bear_fish
2018/09/19
6.3K0
ElasticSearch 空搜索与多索引多类型搜索
https://gist.github.com/clintongormley/8579281
smartsi
2019/08/07
1.2K0
Mongodb多键索引之数组
最近有项目需求用到多键索引,Mongodb中字段值支持多键索引主要包括嵌套文档、数组以及数组嵌套文档.例如联系包括手机、固定电话、邮箱、微信、QQ等,对于字段值存储类型不一样,决定创建多键索引也不一样同时性能也存在差异,例如数组值(包括数组以及数组文档),创建多键索引时会为数组中每个元素都创建索引键,如数组中元素特别多,相应索引也会特别大,创建多键索引或者组合索引时最多只支持一个数组值.
徐靖
2020/08/18
1.8K0
RabbitMQ——队列索引文件格式
RabbitMQ的持久化包含两个部分:队列索引(queue index)和消息存储(message store)。
陈猿解码
2023/02/28
6740
RabbitMQ——队列索引文件格式
iOS 计算NSString宽高与计算NSAttributedString的宽高
开篇 项目有一个客服反馈功能,用到的是聊天列表的形式,这就免不了计算字符串的宽高,由于要给字符串加间距,没办法,只能用 NSAttributedString 所以要计算NSAttributedString的长宽 计算NSString宽高 计算NSString宽高很简单,代码如下: //返回字符串所占用的尺寸. - (CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize { NSDictionary *attrs = @{NSFontAt
GuangdongQi
2018/05/24
5.2K0
PHP多文件上传格式化
文件上传是所有web应用中最常见的功能,而PHP实现这一功能也非常的简单,只需要前端设置表单的 enctype 值为 multipart/form-data 之后,我们就可以通过 $_FILES 获得表单中的 file 控件中的内容。
硬核项目经理
2020/07/22
1.7K0
宽表的缺点
宽表在BI业务中比比皆是,每次建设BI系统时首先要做的就是准备宽表。有时系统中的宽表可能会有上千个字段,经常因为“过宽”超过了数据库表字段数量限制还要再拆分。
磊哥
2023/02/16
2.3K0
宽表的缺点
Lucene系列(11)索引格式之pay文件
同样在构造函数中. org.apache.lucene.codecs.lucene84.Lucene84PostingsWriter#Lucene84PostingsWriter.
呼延十
2021/03/15
7950
Lucene系列(六)索引格式之fdt文件
fdt文件,以正排的方式, 存储了field的原始真实数据. 也就是说, 你添加到所有中的所有field内容. 都会存储在此文件中.
呼延十
2021/02/02
1.4K0
Lucene系列(六)索引格式之fdt文件
Lucene系列(七)索引格式之fdx文件
在CompressingStoredFieldsWriter类的构造函数中, 初始化了FieldsIndexWriter类的实例, 由它来进行fdx文件的写入,看看他的构造函数.
呼延十
2021/02/02
7040
Lucene系列(七)索引格式之fdx文件
Mongodb多键索引之嵌套文档
接上上一篇文档 Mongodb多键索引之数组,本次继续多键索引,到目前为止还没有分析业务中具体使用方式以及需求,只知道需要使用多键索引来满足不同查询,通过一个多键索引来解决不同谓词过滤,具体能否实现以及到底使用数组、嵌套文档还是数组文档方式?目前都是未知数,所以通过学习官方资料以及实际验证来解决如上2个问题.【能不能以及怎么做问题】,同时引出关键问题性能问题,选择一个能做方式满足业务需求,到底性能如何?
徐靖
2020/08/25
3K0

相似问题

熊猫长到宽,多列

110

长到宽的熊猫

20

长到宽的熊猫

18

长到宽格式

10

python中多列的长到宽格式

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文