我的df如下所示:

  name1 name2  value
0     A     B   1300
1     A     C    150
2     A     D    300
3     B     C    450
4     B     D    200
5     C     D    300

我try 对该表执行pivot次操作,以基于value列绘制类似Corr的热图:

table = df.pivot(columns='name1', index='name2', values='value')
table

结果是:

name1       A      B      C
name2                      
B      1300.0    NaN    NaN
C       150.0  450.0    NaN
D       300.0  200.0  300.0

如何创建一个包含A-D的方阵,其值为name1 name2等于name2 name1(A/B=B/A=1300)?

请注意,情况并非如此.

        A       B      C      D
A     NaN  1300.0  150.0  300.0
B  1300.0     NaN  450.0  200.0
C   150.0   450.0    NaN  300.0
D   300.0   200.0  300.0    NaN

可重现的输入:

import pandas as pd

products_list = [['A', 'B', 1300],
                 ['A', 'C', 150],
                 ['A', 'D', 300],
                 ['B', 'C', 450],
                 ['B', 'D', 200],
                 ['C', 'D', 300]]

df = pd.DataFrame(products_list, columns=['name1', 'name2', 'value'])

推荐答案

旋转后,您可以对transpose进行combine_first:

# table = df.pivot(columns='name1', index='name2', values='value')
out = table.combine_first(table.T)

输出:

        A       B      C      D
A     NaN  1300.0  150.0  300.0
B  1300.0     NaN  450.0  200.0
C   150.0   450.0    NaN  300.0
D   300.0   200.0  300.0    NaN

或者,但不那么优雅,将列和pivot之前的concat互换:

out = (pd.concat([df, df.rename(columns={'name1': 'name2', 'name2': 'name1'})])
         .pivot(columns='name1', index='name2', values='value')
       )

Python相关问答推荐

如何使用Jinja语法在HTML中重定向期间传递变量?

使用Keras的线性回归参数估计

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

加速Python循环

基于索引值的Pandas DataFrame条件填充

在np数组上实现无重叠的二维滑动窗口

如何设置视频语言时上传到YouTube与Python API客户端

递归访问嵌套字典中的元素值

计算天数

Python中的变量每次增加超过1

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

比Pandas 更好的 Select

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

语法错误:文档. evaluate:表达式不是合法表达式

使用类型提示进行类型转换

如何在Python中将超链接添加到PDF中每个页面的顶部?

如何写一个polars birame到DuckDB

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

修改.pdb文件中的值并另存为新的

将标签与山脊线图对齐