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

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

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

慕少森 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 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号