python - reshape pandas 中的距离矩阵

标签 python pandas

我有一个 df1 形状的数据框

import pandas as pd

df1 = pd.DataFrame({
    'From': ['A','B','C'],
    'To': ['X','Y','Z'],
    'Price': [1,2,3] 
})

我想做的是将 df1 reshape 为 df2 的形式。期望的最终结果是这样的:

df2 = pd.DataFrame({
    'Location': ['A','X','B','Y','C','Z'],
    'Direction': ['Origin','Destination','Origin','Destination','Origin','Destination'],
    'Price': [1,1,2,2,3,3] 
})

我想用 pandas stack()、pivot()、melt() 等来实现这一点,但我不知道它是如何完成的。

最佳答案

首先重命名列,然后按DataFrame.set_index reshape 形状和 DataFrame.stack :

df = (df1.rename(columns={'From':'Origin','To':'Destination'})
         .set_index('Price')
         .rename_axis('Direction', axis=1)
         .stack()
         .reset_index(name='Location')
         .reindex(['Location','Direction','Price'], axis=1))
print (df)
  Location    Direction  Price
0        A       Origin      1
1        X  Destination      1
2        B       Origin      2
3        Y  Destination      2
4        C       Origin      3
5        Z  Destination      3

如果顺序不重要:

df2 = (df1.rename(columns={'From':'Origin','To':'Destination'})
          .melt('Price',var_name='Direction',value_name='Location')
          .reindex(['Location','Direction','Price'], axis=1)
         )
print (df2)
  Location    Direction  Price
0        A       Origin      1
1        B       Origin      2
2        C       Origin      3
3        X  Destination      1
4        Y  Destination      2
5        Z  Destination      3

关于python - reshape pandas 中的距离矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60295838/

相关文章:

python - 放 Pandas 数据框时,不要填写超出每一行的时间段

python - django 如何处理多个 memcached 服务器?

python - python 中用于存储命名数据的 3 维立方体的最佳数据结构

python - 测试期间的 Flask-Admin 蓝图创建

numpy - 简单的多维 numpy ndarray 到 pandas 数据框方法?

python - 更快的日期格式化解决方案

python - 如何使用 np.arange 按系列类型划分系列

python - 使用 urllib2 进行 POST 调用而不是 GET

python - 我的 openssl 和 ssl 默认 CA 证书路径是什么?

python - Pandas 通过局部变量查询并获取空值