【发布时间】:2018-03-28 15:22:35
【问题描述】:
我想根据数据框 df 创建一个比较矩阵。
让我们假设下面的数据框。
df= pd.DataFrame({'row' : ['a','b','c','d'],
'col_A' : [1,2,3,4],
'col_B' : [1,2,3,4],
'col_C' : [1,2,3,4],
'col_D' : [1,2,3,4]});df
df = df.set_index('row');df
数据框如下所示:
col_A col_B col_C col_D
row
a 1 1 1 1
b 2 2 2 2
c 3 3 3 3
d 4 4 4 4
我还有一个如下所示的映射,其中 a 和 b 以及 c 和 d 是同一个实体。
mapping = pd.DataFrame({'row' : ['a','b','c','d'],
'Mapping' : ['b','a','d','c']}).set_index('row');mapping
因此,我想构建一个新的数据框,它具有 df 索引的所有可能组合,但不重复。 我已经设法使用 pandas MultiIndex 功能为新的比较数据框创建了索引(如果您能想到一种更 pyhtonic 的方式,请随时发布它)。
创建 pandas 多索引(所有可能的组合但不重复)
arrays = [['a', 'a', 'a', 'b', 'b', 'c'],
['b', 'c', 'd', 'c', 'd', 'd']]
index = pd.MultiIndex.from_tuples(tuples, names=['IndexA', 'IndexB'])
因此, 问题 1:如何构造一个比较矩阵,从 pandas MultiIndex 中获取每对的绝对差值和初始 df 中的值。
比较数据框
IndexA IndexB Col_A Col_B Col_C Col_D
a b 1 1 1 1
a c 2 2 2 2
a d 3 3 3 3
b c 1 1 1 1
b d 1 1 1 1
c d 1 1 1 1
问题 2:如何添加一个新列来查找索引对和映射表以定义哪个对是匹配的?
比较矩阵/DataFrame 与匹配列
IndexA IndexB Col_A Col_B Col_C Col_D Match
a b 1 1 1 1 1
a c 2 2 2 2 0
a d 3 3 3 3 0
b c 1 1 1 1 0
b d 1 1 1 1 0
c d 1 1 1 1 1
【问题讨论】:
-
注意原始df的每一行都包含相同的值
-
我明白你的意思。让我纠正一下。
标签: python pandas dataframe comparison multi-index