pandas 如何将 Dataframe 转换为具有键元组的字典

6l7fqoea  于 2023-03-21  发布在  其他
关注(0)|答案(2)|浏览(230)

我怎样把一个 Dataframe 转换成一个字典,把键作为一个元组?

0            1             2                
0   0           4733          456           
1   5223        0             5680          
2   901         5635          0

像这样:

i!=j

{(0, 1): 4733,
 (0, 2): 456,
 (1, 0): 5223,
 (1, 2): 5680,
 (2, 0): 901,
 (2, 1): 5635
}
sqougxex

sqougxex1#

你可以这样做:

import pandas as pd
df = pd.DataFrame({0: [0, 5223, 901], 1: [4733, 0, 5635], 2: [456, 5680, 0]})

result = {}
for k, v in df.to_dict(orient='list').items():
    for idx, value in enumerate(v):
        if k != idx:
            result[(idx, k)] = value
print(result)

输出:

{
    (1, 0): 5223, 
    (2, 0): 901, 
    (0, 1): 4733, 
    (2, 1): 5635, 
    (0, 2): 456, 
    (1, 2): 5680
}
fbcarpbf

fbcarpbf2#

您可以使用stack()to_dict()

df.stack().to_dict()

输出:

{(0, '0'): 0,
 (0, '1'): 4733,
 (0, '2'): 456,
 (1, '0'): 5223,
 (1, '1'): 0,
 (1, '2'): 5680,
 (2, '0'): 901,
 (2, '1'): 5635,
 (2, '2'): 0}

看起来应该排除具有相同值的元组。如果是这种情况,下面应该工作:

df.where(df.ne(0)).stack().to_dict()

{(i,c):v for (i,c),v in df.stack().to_dict().items() if int(i) != int(c)}

输出:

{(0, '1'): 4733,
 (0, '2'): 456,
 (1, '0'): 5223,
 (1, '2'): 5680,
 (2, '0'): 901,
 (2, '1'): 5635}

相关问题