python中pandas数据帧的矩阵表示

时间:2015-12-28 05:23:50

标签: python pandas matrix pivot dataframe

我有像

这样的数据框架
 from   to  Amt
 a      b   100
 a      c   200
 a      d   220
 b      a   250
 b      c   300
 b      d   330
 c      a   100
 c      b   120
 c      d   320
 d      a   211
 d      b   980
 d      c   430    

我想以矩阵格式表示它,如

     a     b     c    d
a    0    100    200  220
b   250    0     300  330
c   100   120    0    320
d   211   980    430   0

如何实现......

我已关注Printing Lists as Tabular Data链接。但没有得到我想要的东西。

3 个答案:

答案 0 :(得分:3)

您需要透视数据。这是一个例子。

pivot_df = df.pivot(index='from', columns='to', values='Amt')

为了预先进行小数计算,您可以使用groupby(),然后transform('sum')。它类似于SQL窗口函数和。

df['sums'] =  df.groupby('from')['amt'].transform('sum')
df['frac'] = df['amt'] / df['sums']
df.pivot(index='from', columns='to', values='frac')

答案 1 :(得分:3)

您需要转动数据框。看到 http://pandas.pydata.org/pandas-docs/stable/reshaping.html

df.pivot(index="from", columns="to",values="Amt" )

答案 2 :(得分:1)

您也可以使用pivot_table来实现这一目标:

df_pivoted = pd.pivot_table(df, index='from', columns='to', fill_value=0)
print(df_pivoted)

      Amt               
to      a    b    c    d
from                    
a       0  100  200  220
b     250    0  300  330
c     100  120    0  320
d     211  980  430    0