我有一个庞大的数据框,我想创建一个字典。字典的键将是行的索引,值将是按该行中的值(降序)排序的数据帧的列名列表。请考虑以下示例:
df= 23 45 12 3 6
45 0.2 1 0.12 0.5 0.1
12 0.5 0.2 1 0.3 0.9
23 0.1 0.9 0.3 1 0.5
我想以下列形式创建一个字典:
dict={ '45':['45','3','23','12','6'],
'12':['12','6','23','3','45'],
'23':['3','45','6','23']}
其中值是按其行中的值排序的列名。我尝试了以下方法:
for idx,row in df.iteritems():
l = row.values.tolist()
l.sort(reverse=True)
print idx,l
但是这给了我的值而不是按降序排序的列名。任何有关如何产生所需结果的帮助将不胜感激。感谢。
答案 0 :(得分:2)
嗯,这似乎有效:
import numpy as np
df = pd.DataFrame({'A': [1, 3, 10, 50], 'B': [2, -8, 3, 7], 'C': [1, 10, -20, 1]})
>>> dict([(r[0], list(df.columns[np.argsort(list(r)[1: ])])) \
for r in list(df.to_records())])
{0: ['A', 'C', 'B'],
1: ['B', 'A', 'C'],
2: ['C', 'B', 'A'],
3: ['C', 'B', 'A']}
<强>解释强>
list(df.to_records())
是一个行列表作为元组。r[0]
是元组中的第一个元素。list(r)[1: ]
是元组的其余部分。np.argsort
根据排序的值顺序返回数组的索引。dict(
list_of_pairs )
从一组对中创建一个字典。