我有一个采用这种格式的数据框
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而言,这种方法与我的配合并不理想。可能还要更快,因为速度是个问题。
答案 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