为了账号安全,请及时绑定邮箱和手机立即绑定

从所有排列的数据框中创建一个矩阵

从所有排列的数据框中创建一个矩阵

慕少森 2022-12-06 16:48:01
我有一个数据框,用于 Caltrain 中 2 个车站的所有可能组合以及它们之间的行程票价。我想制作一个价值矩阵,但无法理解如何制作。数据看起来像这样:我试图用 pd.Dataframe(index = , columns =) 做一些事情,但它不起作用。一定是这样的:+---------------+----------------+-----------+|    station    |  San Francisco |  Broadway |+---------------+----------------+-----------+| San Francisco |  0             |  value    || Broadway      | value          |  0        |+---------------+----------------+-----------+谢谢!
查看完整描述

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

你需要使用df.pivot().


df.pivot(index='SOURCE_STN', columns='DEST_STN', values='RC1($)').fillna(0)

编辑:

对于具有重复项的数据框,您需要改用并在参数df.pivot_table()中指定聚合函数。aggfunc


import numpy as np


df.pivot_table(index='SOURCE_STN', columns='DEST_STN', values='RC1($)', aggfunc=np.sum).fillna(0)


查看完整回答
反对 回复 2022-12-06
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

您可以通过在 pandas 中使用pivot_table来实现这一点。


data_frame.pivot_table('RC1($)', 'SOURCE_STN', 'DEST_STN').fillna(0)

解释:


您期望的矩阵可以通过以下代码实现,因为排列仍然保留,同时还通过获取重复项的平均值来管理重复项。


import pandas as pd

import numpy as np


route_table = pd.read_csv("path_to_file.csv")


route_matrix = route_table.pivot_table('RC1($)', 'SOURCE_STN', 'DEST_STN', aggfunc=np.mean).fillna(0)

print(route_matrix)

输出:


DEST_STN                 22nd Street  Atherton  ...  Sunnyvale  Tamien

SOURCE_STN                                      ...                   

22nd Street                     0.00      8.25  ...       8.25    10.5

Atherton                        3.75      0.00  ...       8.25    10.5

Bayshore                        3.75      8.25  ...       8.25    10.5

Belmont                         3.75      8.25  ...       8.25    10.5

Blossom Hill                    3.75      8.25  ...       8.25    10.5

Broadway                        3.75      8.25  ...       8.25    10.5

Burlingame                      3.75      8.25  ...       8.25    10.5

California Ave.                 3.75      8.25  ...       8.25    10.5

Capitol                         3.75      8.25  ...       8.25    10.5

College Park                    3.75      8.25  ...       8.25    10.5

Gilroy                          3.75      8.25  ...       8.25    10.5

Hillsdale                       3.75      8.25  ...       8.25    10.5

为了更好地理解透视表的不同视角:


备用代码


route_matrix = route_table.pivot_table('RC1($)', 'DEST_STN', 'SOURCE_STN', aggfunc=np.mean).fillna(0)

print(route_matrix)

输出


SOURCE_STN               22nd Street  Atherton  ...  Sunnyvale  Tamien

DEST_STN                                        ...                   

22nd Street                     0.00      3.75  ...       3.75    3.75

Atherton                        8.25      0.00  ...       8.25    8.25

Bayshore                        3.75      3.75  ...       3.75    3.75

Belmont                         6.00      6.00  ...       6.00    6.00

Blossom Hill                   12.75     12.75  ...      12.75   12.75

Broadway                        6.00      6.00  ...       6.00    6.00

Burlingame                      6.00      6.00  ...       6.00    6.00

California Ave.                 8.25      8.25  ...       8.25    8.25

Capitol                        12.75     12.75  ...      12.75   12.75

College Park                   10.50     10.50  ...      10.50   10.50

Gilroy                         15.00     15.00  ...      15.00   15.00


查看完整回答
反对 回复 2022-12-06
  • 2 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信