基于以索引和列值作为输入的函数设置 Pandas Dataframe 元素的最快方法
Fastest way to set elements of Pandas Dataframe based on a function with index and column value as input
我只有一列 Pandas 数据框:
s =
VALUE
INDEX
A 12
B 21
C 7
...
Y 21
Z 7
我想把它变成一个与s.index
具有相同索引和列的方阵掩码,如果列和索引的值在[=中相同,则每个元素要么是True
15=] 或 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
我的实际 s
有 10K+ 行。生成 mask
DataFrame 的最快方法是什么?
我尝试过的一种方法是创建一个具有两个 for
循环的 2 级字典。 (例如 dict['A']['B'] = dict['B']['A'] = True if s.loc['A'] == s.loc['B'] else False
,等等)。然后将 dict
的底层转换为 Pandas 系列(例如 row = pd.Series(dict[A])
),然后将该系列附加到 mask
。 mask
逐行迭代构建。
这需要很长时间,并且必须显式循环 10K x 10K / 2 = 50M 个元素...不理想?
使用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
我只有一列 Pandas 数据框:
s =
VALUE
INDEX
A 12
B 21
C 7
...
Y 21
Z 7
我想把它变成一个与s.index
具有相同索引和列的方阵掩码,如果列和索引的值在[=中相同,则每个元素要么是True
15=] 或 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
我的实际 s
有 10K+ 行。生成 mask
DataFrame 的最快方法是什么?
我尝试过的一种方法是创建一个具有两个 for
循环的 2 级字典。 (例如 dict['A']['B'] = dict['B']['A'] = True if s.loc['A'] == s.loc['B'] else False
,等等)。然后将 dict
的底层转换为 Pandas 系列(例如 row = pd.Series(dict[A])
),然后将该系列附加到 mask
。 mask
逐行迭代构建。
这需要很长时间,并且必须显式循环 10K x 10K / 2 = 50M 个元素...不理想?
使用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