gpt4 book ai didi

python-3.x - 从 Pandas 数据框中检索非零列作为字典

转载 作者:行者123 更新时间:2023-12-03 16:32:31 24 4
gpt4 key购买 nike

给定一个如下所示的数据框

            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
我想以字典格式获取给定行的大于零的列值。例如,对于仓鼠线,结果应该是:
{ 'hamster': 1, 'dolphin': 0.5 }
不过,省略具有相同名称的列会更好,因此对于“仓鼠”,这会更好:
{ 'dolphin': 0.5 }
目前我使用 df["hamster"].to_dict() 接收给定行的所有值并使用字典理解删除零值,例如 {k: v for (k,v) in d.items() if v > 0 } ,但它远非理想,因为数据框的原始大小约为 50000 x 50000。在 Pandas 中是否有更简单的方法来过滤掉值为 0 的列(以及具有相同名称的列,如果它很容易做到) ?

最佳答案

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

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}
或者您可以将上述系列转换为以索引为键的字典,
df.apply(lambda x: x[(x!=0) & (x.keys()!=x.name)].to_dict()).to_dict()
你得到,
 {'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 获得关注
{0: {'dog': 0.5, 'dolphin': 0.25},
1: {'cat': 0.5},
2: {'dolphin': 0.5},
3: {'cat': 0.25, 'hamster': 0.5}}
您可以明确指定 orient 参数
df.to_dict('index')

关于python-3.x - 从 Pandas 数据框中检索非零列作为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64175070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com