Python 数据透视表用于填写大熊猫的成对观察数据

Python 数据透视表用于填写大熊猫的成对观察数据,python,pandas,pivot-table,Python,Pandas,Pivot Table,目标是得到一个值为T1-T2对的表。我有以下形式的数据: df T1 T2 Score 0 A B 5 1 A C 8 2 B C 4 我试过: df.pivot_table('Score','T1','T2') B C A 5.0 8.0 B NaN 4.0 我期望: A B C A 5 8 B 5 4 C 8 4 我觉得有点像相关表。因为在这种情况下,A-B对与B-A相同。

目标是得到一个值为T1-T2对的表。我有以下形式的数据:

df
    T1  T2  Score
0   A   B   5
1   A   C   8
2   B   C   4
我试过:

df.pivot_table('Score','T1','T2')

    B   C       
A   5.0 8.0
B   NaN 4.0
我期望:

  A  B  C
A    5  8
B 5     4
C 8  4  

我觉得有点像相关表。因为在这种情况下,A-B对与B-A相同。

首先通过交换
T1
T2
将所有可能的索引与列值一起添加,最后:

另一种方法使用:

另一种方式:

In [11]: df1 = df.set_index(['T1', 'T2']).unstack(1)

In [12]: df1.columns = df1.columns.droplevel(0)

In [13]: df2 = df1.reindex(index=df1.index | df1.columns, columns=df1.index | df1.columns)

In [14]: df2.update(df2.T)

In [15]: df2
Out[15]:
     A    B    C
A  NaN  5.0  8.0
B  5.0  NaN  4.0
C  8.0  4.0  NaN
df1 = df.pivot_table('Score','T1','T2')
df2 = df.pivot_table('Score','T2','T1')
common_val = np.intersect1d(df['T1'].unique(), df['T2'].unique()).tolist()

df = df1.merge(df2, how='outer', left_index=True, right_index=True, on=common_val)

print(df)
     B    C    A
A  5.0  8.0  NaN
B  NaN  4.0  5.0
C  4.0  NaN  8.0
In [11]: df1 = df.set_index(['T1', 'T2']).unstack(1)

In [12]: df1.columns = df1.columns.droplevel(0)

In [13]: df2 = df1.reindex(index=df1.index | df1.columns, columns=df1.index | df1.columns)

In [14]: df2.update(df2.T)

In [15]: df2
Out[15]:
     A    B    C
A  NaN  5.0  8.0
B  5.0  NaN  4.0
C  8.0  4.0  NaN