为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶不菲 2021-11-02 16:12:40
目标是获得一个表,其中包含对 T1-T2 的值。我有以下形式的数据:df    T1  T2  Score0   A   B   51   A   C   82   B   C   4我试过:df.pivot_table('Score','T1','T2')    B   C       A   5.0 8.0B   NaN 4.0我期望:  A  B  CA    5  8B 5     4C 8  4  我觉得有点像相关表。因为在这种情况下 AB 对与 BA 相同。
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

首先通过添加与列中的值的所有可能的指数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    C

T1               

A   NaN  5.0  8.0

B   5.0  NaN  4.0

C   8.0  4.0  NaN


查看完整回答
反对 回复 2021-11-02
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

另一种方法使用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    A

A  5.0  8.0  NaN

B  NaN  4.0  5.0

C  4.0  NaN  8.0


查看完整回答
反对 回复 2021-11-02
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

其它的办法:


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


查看完整回答
反对 回复 2021-11-02
  • 3 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号