gpt4 book ai didi

python - Pandas 数据框到字典的稀疏字典

转载 作者:太空狗 更新时间:2023-10-30 00:09:57 26 4
gpt4 key购买 nike

如何将 pandas dataFrame 转换为稀疏字典,其中仅显示某些截断值的索引。在下面的玩具示例中,我只需要值 > 0

的每一列的索引
import pandas as pd

table1 = [['gene_a', -1 , 1], ['gene_b', 1, 1],['gene_c', 0, -1]]
df1 = pd.DataFrame(table)
df1.columns = ['gene','cell_1', 'cell_2']
df1 = df1.set_index('gene')
dfasdict = df1.to_dict(orient='dict')

这给出:

dfasdict = {'cell_1': {'gene_a': -1, 'gene_b': 0, 'gene_c': 0}, 'cell_2': {'gene_a': 1, 'gene_b': - 1, 'gene_c': -1}}

但所需的输出是一个稀疏字典,其中只显示小于零的值:

desired = {'cell_1': {'gene_a': -1}, 'cell_2': {'gene_b': -1, 'gene_c': -1}}

我可以做一些处理来在创建后更改 dfasdict 字典,但我想在同一步骤中进行转换,因为之后的处理涉及迭代非常大的字典。这可以在 pandas 中完成吗?

最佳答案

此结果使用字典推导式生成结果。对于 cell_1cell_2 中的每一列,它会找到小于 (lt) 零的列,并将结果转换为字典。

>>> {col: df1.loc[df1[col].lt(0), col].to_dict() for col in ['cell_1', 'cell_2']}
{'cell_1': {'gene_a': -1}, 'cell_2': {'gene_c': -1}}

为了帮助理解这里发生了什么:

>>> df1.loc['cell_1'].lt(0)
gene
gene_a True
gene_b False
gene_c False
Name: cell_1, dtype: bool

>>> df1.loc[df1['cell_1'].lt(0), 'cell_1'].to_dict()
{'gene_a': -1}

关于python - Pandas 数据框到字典的稀疏字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36586015/

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