如何从仅具有特定列的 pandas 数据框创建 OD 矩阵

How to create an OD matrix from a pandas Data Frame only with specific columns

我有如下图所示的数据框。我需要创建一个 Origin-Destination 矩阵,其中 Row 轴将日期作为一列,值来自“From municipality code”,在 Columns 轴上我将具有“To municipality code”的值,并且填充矩阵的值将是“计数”列的值。如何从 pandas 数据框中获取矩阵?

result_final.head()
ODMatrix= pd.DataFrame(0, index=list(range(0,202708)), columns = list(range(0,202708))
                ).add(df.pivot_table(values='count', index="from_municipality_code",
               columns='to_municipality_code', aggfunc=len),fill_value=0).astype('int')

我尝试将 pandas 数据框转换为 numpy 数组,但没有成功。

result_final[['date', 'from_municipality_code','to_municipality_code','count','Lng_x','Lat_x','Lng_y','Lat_y',]].to_numpy()

如果这有助于可视化,这就是我想要的最终矩阵:

您可以使用pivot_table方法。这是一个工作示例:

import pandas as pd
import numpy as np

# Some example data
df = pd.DataFrame({"from": np.random.randint(0, 10, (1000,)), "to": np.random.randint(0, 10, (1000,))})
# Remove examples where from == to
df = df.loc[df["from"] != df["to"]].copy()

# The key operation
matrix = (
    df.assign(count=1)
    .pivot_table(index="from", columns="to", values="count", aggfunc="count")
    .fillna(0)
    .astype(int)
)

print(matrix)                                                                                                                                                                                               

to     0   1   2   3   4   5   6   7   8   9
from                                        
0      0  10  14   7   9  14  18   6  11   8
1     11   0  12   7   4  12   9  11   6  13
2      6  14   0  12  13   8   5  15  11  10
3     10   9  12   0  14  10   8  14   9  11
4     10  14  14  11   0   8   4  10  11   4
5     15  10  10  18   8   0  15  15   8  12
6      9   7  10  13  10   8   0  11  12  10
7      9  12   4   6   9   9   8   0   8  12
8      8   8  11  12  15  10  11   4   0   6
9     10  13  11  16  14  18  11   9   4   0