Pandas 不同分类变量的列之间的差异

Pandas difference between columns of different categorical variable

我有一个包含 1000 列的数据框,如下所示

Item Value1 Value2 Value3 Value4 Value..n
A      12     24     14    50     43
B      14     27     13    48     47
C      10     32     17    89     49
D      17     30     15    23     40

我想根据 Item 变量计算值之间的差异,类似这样

Difference Value1 Value2 Value3 Value4 Value..n
A-B          2      3      1      2      4
A-C          2     ...    ......    ...
A-D
B-C
B-D
C-D

并排除项目条目多于其他条目的行。例如,A 项有 100 个条目,B 项有 150 个条目,则将计算前 100 个条目的差值,而 B 项接下来的 50 个条目将被排除在计算之外。

我们可以 itertools.combinations,然后 reindex 并创建数据框

import itertools
idx = pd.MultiIndex.from_tuples([*itertools.combinations(df.Item,2)])
df = df.set_index('Item')

out = pd.DataFrame(df.reindex(idx.get_level_values(0)).values-df.reindex(idx.get_level_values(1)).values,
                   index=idx,
                   columns=df.columns)
out.index=out.index.map('-'.join)
out
     Value1  Value2  Value3  Value4  Value
A-B      -2      -3       1       2     -4
A-C       2      -8      -3     -39     -6
A-D      -5      -6      -1      27      3
B-C       4      -5      -4     -41     -2
B-D      -3      -3      -2      25      7
C-D      -7       2       2      66      9