如何将简单的网络数据帧更改为关联表?

时间:2019-07-22 17:00:50

标签: python pandas dataframe

我有一个采用这种格式的数据框

  from to weight
0    A  D 3
1    B  A 5
2    C  E 6
3    A  C 2

我希望将其转换为如下所示的相关类型数据框-

  A B C D E
A 0 0 2 0 3
B 5 0 0 0 0
C 0 0 0 0 6
D 0 0 0 0 0
E 0 0 0 0 0

我认为一种可能的(幼稚的)解决方案是遍历数据框,然后通过比较行和列将值分配给另一个数据框的正确单元格。

类似的东西:

new_df = pd.DataFrame(columns = sorted(set(df["from"])), index =sorted(set(df["from"])))

for i in range(len(df)):
    cor.loc[df.iloc[i,0], df.iloc[i,1]] = df.iloc[i,2]

那行得通。但是,我已经读过有关不循环访问熊猫数据帧here的信息。

主要问题是我的数据框大于此范围-几千行。因此,我想知道是否对此有另一种解决方案,因为就Python而言,这种方法与我的配合并不理想。可能还要更快,因为速度是个问题。

1 个答案:

答案 0 :(得分:1)

IIUC,这是重新索引的关键点:

(df.pivot(index='from', columns='to', values='weight')
 .reindex(all_vals)
 .reindex(all_vals,axis=1)
 .fillna(0)
)

输出:

to      A    B    C    D    E
from                         
A     0.0  0.0  2.0  3.0  0.0
B     5.0  0.0  0.0  0.0  0.0
C     0.0  0.0  0.0  0.0  6.0
D     0.0  0.0  0.0  0.0  0.0
E     0.0  0.0  0.0  0.0  0.0