首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为dict从pandas数据帧中检索非零列

作为dict从pandas数据帧中检索非零列
EN

Stack Overflow用户
提问于 2020-10-03 00:25:47
回答 1查看 161关注 0票数 5

给定如下的数据帧

代码语言:javascript
复制
            cat        dog        hamster    dolphin
cat         1          0.5        0          0.25
dog         0.5        1          0          0
hamster     0          0          1          0.5
dolphin     0.25       0          0.5        1

我想以字典格式获取给定行的大于零的列值。例如,对于仓鼠线,结果应该是:

代码语言:javascript
复制
{ 'hamster': 1, 'dolphin': 0.5 }

不过,省略同名的列会更好,所以对于'hamster',这会更好:

代码语言:javascript
复制
{ 'dolphin': 0.5 }

目前,我使用df["hamster"].to_dict()接收给定行的所有值,并使用字典理解(如{k: v for (k,v) in d.items() if v > 0 } )删除零值,但这并不理想,因为dataframe的原始大小约为50000 x 50000。pandas中有没有更简单的方法来筛选出值为0的列(如果容易的话,还有同名的列)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-03 00:42:50

您可以应用to_dict来创建字典作为每行的值,并将序列作为输出,

代码语言:javascript
复制
df.apply(lambda x: x[(x!=0) & (x.keys()!=x.name)].to_dict())

cat        {'dog': 0.5, 'dolphin': 0.25}
dog                         {'cat': 0.5}
hamster                 {'dolphin': 0.5}
dolphin    {'cat': 0.25, 'hamster': 0.5}

也可以将上述系列转换为以索引为关键字的字典。

代码语言:javascript
复制
df.apply(lambda x: x[(x!=0) & (x.keys()!=x.name)].to_dict()).to_dict()

你得到了,

代码语言:javascript
复制
 {'cat': {'dog': 0.5, 'dolphin': 0.25},
 'dog': {'cat': 0.5},
 'hamster': {'dolphin': 0.5},
 'dolphin': {'cat': 0.25, 'hamster': 0.5}}

如果您使用pandas 1.1.2进行跟踪

代码语言:javascript
复制
{0: {'dog': 0.5, 'dolphin': 0.25},
 1: {'cat': 0.5},
 2: {'dolphin': 0.5},
 3: {'cat': 0.25, 'hamster': 0.5}}

您可以显式指定orient参数

代码语言:javascript
复制
df.to_dict('index')
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64175070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档