从数据帧转换到矩阵是否有可能?

时间:2019-06-10 04:43:39

标签: python pandas dataframe matrix multiple-columns

我是python的新手, 我有一个庞大的dataframe

Person  OD
A       BS1
A       BS2
B       BS4
B       BS8
C       BS5
C       BS1
D       BS9
D       BS7
E       BS2
E       BS7
F       BS2
F       BS1
G       BS1
G       BS2

是否有可能转换成python-pandas中的原点(OD)矩阵?例如,从BS1到BS2有2个人(A和G),然后在OD矩阵中有2个人进入BS1-BS2。

我的预期结果:

O/D BS1 BS2 BS3 BS4 BS5 BS6 BS7 BS8 BS9
BS1     2                           
BS2 1                       1       
BS3                                 
BS4                             1   
BS5 1                               
BS6                                 
BS7                                 
BS8                                 
BS9                         1   

该怎么做?非常感谢

1 个答案:

答案 0 :(得分:2)

以下是解决方案。

pd.pivot_table

您也可以使用od_matrix = pd.pivot_table(od_df, index="O", columns="D", aggfunc="size").reindex(index=places, columns=places) 并将第四行替换为

def oxford_comma(arr)
  case arr.size
  when 0
    ""
  when 1
    arr.first
  when 2
    arr.join(' and ')
  else
    [arr[0..-2].join(', '), arr.last].join(', and ')
  end
end