例如,让我们考虑下面的DataFrame:
id metric_a metric_b
0 a 1 2
1 b 10 20
2 c 30 40
所得到的 Dataframe 将由id
的所有组合组成,即n2行(方阵)。
在我们的例子中,由于我们有3个唯一的id,所以总共会得到9行。
现在,假设每一行实际上是一对x-y
的id,我想用metric_a
表示x
,用metric_b
表示y
,其中x
和y
只是给定行的两个id。
为了说明这一点:
x y metric_a metric_b
0 a a 1 2
1 a b 1 20
2 a c 1 40
3 b a 10 2
4 b b 10 20
5 b c 10 40
6 c a 30 2
7 c b 30 20
8 c c 30 40
实现这一点的一种方法是首先创建itertools.product
的所有可能组合,然后将初始 Dataframe 合并两次,第一次合并x
的度量,第二次合并y
的度量。
我想到的另一种方法是:
# creating all the combinations of ids
pd.DataFrame(list(itertools.product(df['id'], df['id'])))
# creating all the combinations of metrics
pd.DataFrame(list(itertools.product(df['metric_a'], df['metric_b'])))
# some more code to concat those two horizontally..
然而,我认为应该有一个更优雅的解决方案,我现在想不出来。
另外,使用MultiIndex.from_product
然后重新建立索引的想法是否可行?
任何帮助我们都欢迎!
1条答案
按热度按时间pieyvz9o1#
您可以使用十字
merge
:输出: