数据透视表以填充熊猫中的观察对

目标是获得一个表,其中包含对 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  

我觉得有点像相关表。因为在这种情况下 AB 对与 BA 相同。


蝴蝶不菲
浏览 173回答 3
3回答

小唯快跑啊

首先通过添加与列中的值的所有可能的指数reindex与其他pivot通过掉期T1和T2和最后一个combine_first:idx = np.unique(df[['T1','T2']].values.ravel())df1 = df.pivot_table('Score','T1','T2').reindex(index=idx, columns=idx)df2 = df.pivot_table('Score','T2','T1').reindex(index=idx, columns=idx)df = df1.combine_first(df2)print (df)      A    B    CT1               A   NaN  5.0  8.0B   5.0  NaN  4.0C   8.0  4.0  NaN

牛魔王的故事

另一种方法使用merge: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    AA  5.0  8.0  NaNB  NaN  4.0  5.0C  4.0  NaN  8.0

慕田峪4524236

其它的办法: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]: df2Out[15]:     A    B    CA  NaN  5.0  8.0B  5.0  NaN  4.0C  8.0  4.0  NaN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python