将数据框的一行与相应的一行进行比较,并将数据存储在两列中

时间:2019-08-12 11:27:34

标签: python pandas dataframe

我有一个看起来像这样的数据框:

 Rule ID
0 51183
1 50014
2 53382
3 51893

使用此数据,我想创建另一个包含2列的数据框,即XY,并保留一行与另一行的比较。结果将如下所示:

  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数据的数据框。

如果你们感到骄傲帮助我,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

combinationsDataFrame的构造函数一起使用:

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)]