我有一个Pandas数据框列:
list.add(line.split('-')[1..-1].join(',').replaceAll(',','-'))
我想将它变成一个方形矩阵掩码,其索引和列与s =
VALUE
INDEX
A 12
B 21
C 7
...
Y 21
Z 7
相同,如果s.index
中列和索引的值相同,则每个元素都为True
或者s
否则。
False
我的实际mask =
A B C ... Y Z
A True False False ... False False
B False True False ... True False
C False False True ... False True
...
Y False True False ... True False
Z False False True ... False True
有10K +行。生成s
DataFrame的最快方法是什么?
我尝试过的一种方法是创建一个包含两个mask
循环的2级字典。 (例如for
等)。然后将dict['A']['B'] = dict['B']['A'] = True if s.loc['A'] == s.loc['B'] else False
的底层转换为Pandas系列(例如dict
),然后将该系列追加到row = pd.Series(dict[A])
。 mask
是逐行迭代构造的。
这需要很长时间,并且必须明确地循环通过10K x 10K / 2 = 50M元素......不理想?
答案 0 :(得分:3)
使用numpy
广播
v = s.VALUE.values
pd.DataFrame(v == v[:, None], s.index, s.index)
INDEX A B C Y Z
INDEX
A True False False False False
B False True False True False
C False False True False True
Y False True False True False
Z False False True False True