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
我有一个包含 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