Pandas:比较每两行并将结果输出到一个新的数据帧

时间:2017-02-28 22:53:02

标签: python pandas

import pandas as pd
df1 = pd.DataFrame({'ID':['i1', 'i2', 'i3'],
                   'A': [2, 3, 1],
                   'B': [1, 1, 2],
                   'C': [2, 1, 0],
                   'D': [3, 1, 2]})

df1.set_index('ID')

df1.head()


    A   B   C   D  
ID          
i1  2   1   2   3   
i2  3   1   1   1   
i3  1   2   0   2


df2 = pd.DataFrame({'ID':['i1-i2', 'i1-i3', 'i2-i3'],
                   'A': [2, 1, 1],
                   'B': [1, 1, 1],
                   'C': [1, 0, 0],
                   'D': [1, 1, 1]})

df2.set_index('ID')
df2

        A   B   C   D
ID              
i1-i2   2   1   1   1
i1-i3   1   1   0   1
i2-i3   1   1   0   1

假设数据帧为df1,我想比较每两个不同的行,并在每列获得较小的值,并将结果输出到像df2这样的新数据帧。 例如,要比较i1行和i2行,请将新行i1-i2设为2, 1, 1, 1 请告知大熊猫最好的方法是什么。

1 个答案:

答案 0 :(得分:1)

试试这个:

from itertools import combinations

v = df1.values

r = pd.DataFrame([np.minimum(v[t[0]], v[t[1]])
                  for t in combinations(np.arange(len(df1)), 2)],
                 columns=df1.columns,
                 index=list(combinations(df1.index, 2)))

结果:

In [72]: r
Out[72]:
          A  B  C  D
(i1, i2)  2  1  1  1
(i1, i3)  1  1  0  2
(i2, i3)  1  1  0  1