我有一个有6个分类/字符串值的dataframe。我希望在顺序不重要(即a,b= b,a)的情况下,创建这些字符串值的所有可能组合的数据。
我做了以下工作,但我看到结果是一个排列,而不是一个组合,即它区分(IL,IL-1)和(IL-1,IL)。
我读了一遍:
http://pandas.pydata.org/pandas-docs/stable/merging.html#brief-primer-on-merge-methods-relational-algebra
在mysql中,我可以通过:
select r1.id, r2,id
from rows r1
cross join rows r2
where r1.id < r2.id谢谢你的帮助。
>data = ['IL', 'IL-1', 'IL-2', 'IL-3', 'IL-4', 'IL-5']
>df = pd.DataFrame(data)
>df['key1']= pd.Series([1] * len(df))
>df2 = df.copy()
>cart = pd.merge(df, df2, on='key1')由此产生的数据文件:
0_x
key1
0_y
0
IL 1 IL
1
IL 1 IL-1
2
IL 1 IL-2
3
IL 1 IL-3
4
IL 1 IL-4
5
IL 1 IL-5
6
IL-1 1 IL
7
IL-1 1 IL-1
8
IL-1 1 IL-2
9
IL-1 1 IL-3
10
IL-1 1 IL-4
11
IL-1 1 IL-5
12
IL-2 1 IL
13
IL-2 1 IL-1
14
IL-2 1 IL-2
15
IL-2 1 IL-3
16
IL-2 1 IL-4
17
IL-2 1 IL-5
18
IL-3 1 IL
19
IL-3 1 IL-1
20
IL-3 1 IL-2
21
IL-3 1 IL-3
22
IL-3 1 IL-4
23
IL-3 1 IL-5
24
IL-4 1 IL
25
IL-4 1 IL-1
26
IL-4 1 IL-2
27
IL-4 1 IL-3
28
IL-4 1 IL-4
29
IL-4 1 IL-5
30
IL-5 1 IL
31
IL-5 1 IL-1
32
IL-5 1 IL-2
33
IL-5 1 IL-3
34
IL-5 1 IL-4
35
IL-5 1 IL-5 发布于 2016-03-03 23:27:57
将注释上的内容组合在一起,并使用建议的索引和一些虚拟数据创建一个15行(6C2) DataFrame:
import itertools
import pandas as pd
labels = ['IL', 'IL-1', 'IL-2', 'IL-3', 'IL-4', 'IL-5']
i = pd.MultiIndex.from_tuples(list(itertools.combinations(labels, 2)))
df = pd.DataFrame({'col1':range(len(i))}, index=i)输出:
col1
IL IL-1 0
IL-2 1
IL-3 2
IL-4 3
IL-5 4
IL-1 IL-2 5
IL-3 6
IL-4 7
IL-5 8
IL-2 IL-3 9
IL-4 10
IL-5 11
IL-3 IL-4 12
IL-5 13
IL-4 IL-5 14如果您想要笛卡尔积的所有36个组合(我不认为是这样的):
i = pd.MultiIndex.from_product([labels, labels])https://stackoverflow.com/questions/35780710
复制相似问题