我有一个看起来像这样的数据框:
Rule ID
0 51183
1 50014
2 53382
3 51893
使用此数据,我想创建另一个包含2列的数据框,即X
和Y
,并保留一行与另一行的比较。结果将如下所示:
X Y
51183 50014
51183 53382
51183 51893
50014 53382
50014 51893
53382 51893
因此,这里发生的是,将Rule ID
列中存在的第一个值,即51183
与第二行中存在的第二个值,即50014
进行比较。因此,51183
存储在X
列中,而50014
存储在Y
列中。类似地,然后将51183
与第三行值,即53382
比较,然后与51893
比较。因此,在将第一行值(51183
)与它下面的所有行进行比较之后,比较将移至下一行,即50014
,然后将该值与{{1} }和53382
等。
我尝试了这段代码,在其中尝试了51893
方法,但似乎有误:
stack()
df1 = df.stack()
df1.columns = ['X', 'Y']
是存储df
数据的数据框。
如果你们感到骄傲帮助我,我将不胜感激。
答案 0 :(得分:2)
将combinations
与DataFrame
的构造函数一起使用:
from itertools import combinations
df = pd.DataFrame(list(combinations(df['Rule ID'], 2)), columns=['x','y'])
print (df)
x y
0 51183 50014
1 51183 53382
2 51183 51893
3 50014 53382
4 50014 51893
5 53382 51893
答案 1 :(得分:1)
您可以通过itertools
方法使用combinations
模块:
import pandas as pd
import itertools
my_df = pd.DataFrame({'Rule': [0, 1, 2, 3], 'ID': [51183, 50014, 53382, 51893]})
temp = list(itertools.combinations(list(my_df.ID), 2))
print(temp)
结果:
[(51183, 50014),
(51183, 53382),
(51183, 51893),
(50014, 53382),
(50014, 51893),
(53382, 51893)]