我有像
这样的数据框架 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链接。但没有得到我想要的东西。
答案 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