Python 数据透视表用于填写大熊猫的成对观察数据
目标是得到一个值为T1-T2对的表。我有以下形式的数据: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相同。
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