当前位置: 首页 > 面试题库 >

Pandas-从数据框创建差异矩阵

崔高远
2023-03-14
问题内容

我正在尝试创建一个矩阵以显示Pandas数据框中的行之间的差异。

import pandas as pd

data = {'Country':['GB','JP','US'],'Values':[20.2,-10.5,5.7]}
df = pd.DataFrame(data)

我要这样:

  Country  Values
0      GB    20.2
1      JP   -10.5
2      US     5.7

要变成这样(差异垂直):

  Country     GB     JP     US
0      GB    0.0  -30.7   14.5
1      JP   30.7    0.0   16.2
2      US   14.5  -16.2    0.0

这是可以通过内置函数实现的,还是需要构建一个循环以获得所需的输出?谢谢你的帮助!


问题答案:

这是numpy广播的标准用例:

df['Values'].values - df['Values'].values[:, None]
Out: 
array([[  0. , -30.7, -14.5],
       [ 30.7,   0. ,  16.2],
       [ 14.5, -16.2,   0. ]])

我们使用values属性访问基础的numpy数组,并[:, None]引入了一个新轴,因此结果是二维的。

您可以将其与原始系列结合使用:

arr = df['Values'].values - df['Values'].values[:, None]
pd.concat((df['Country'], pd.DataFrame(arr, columns=df['Country'])), axis=1)
Out: 
  Country    GB    JP    US
0      GB   0.0 -30.7 -14.5
1      JP  30.7   0.0  16.2
2      US  14.5 -16.2   0.0

由于@Divakar,也可以使用以下命令生成数组:

arr = np.subtract.outer(*[df.Values]*2).T

在这里,我们呼吁.outersubtractufunc,它适用于所有对其输入。



 类似资料:
  • 我有一个带有两个变量X和Y的pandas数据帧(大约1M行),并且希望使用scipy,sparse创建一个稀疏矩阵。输出应该是一个n x m矩阵,如果x=x和Y=Y,则其条目为1。 下面是数据结构的示例 所需的输出为 提前致谢

  • 问题内容: 我有一个脚本可以更新5-10列的数据,但有时起始csv与结束csv相同,因此我不想写相同的csvfile,而是希望它不执行任何操作… 如何比较两个数据框以检查它们是否相同? 有任何想法吗? 问题答案: 您还需要小心创建DataFrame的副本,否则csvdata_old将使用csvdata更新(因为它指向相同的对象): 要检查它们是否相等,可以在此答案中使用assert_frame_e

  • 问题内容: 创建给定大小的零填充熊猫数据框的最佳方法是什么? 我用过了: 有更好的方法吗? 问题答案: 您可以尝试以下方法:

  • 我发现了这个先前的职位,它让我接近。如何将数据帧的列和行的子集转换成数字数组 但是,我需要迭代数据帧,并为“a”中每个正确匹配的值创建一个从列“b”到列“j”的3x3数组(或矩阵),而不是根据第三列中的值创建两列的单个数组(或数组)。 我想要的是两个独立的数组,每个一个 我尝试了以下操作,但收到了一个非常难看的错误。该代码是基于原始帖子的尝试。 这是错误- () ----中的IndexingErr

  • 问题内容: 给定以下形式的方形熊猫DataFrame: 如何能在上三角熔化得到以下形式的矩阵 我对惯用的熊猫解决方案更感兴趣,自定义索引器将很容易手动编写… 预先感谢您的考虑和回应。 问题答案: 首先,我将的较低值转换为by和and ,然后设置列名称:

  • 问题内容: 我正在尝试从ordereddict创建一个熊猫数据框,以保留值的顺序。但是由于某种原因,在创建数据框后,字段又被弄乱了。 以下是命令字典的列表: 现在,我应该如何从中创建一个熊猫DataFrame?我正在寻找的是类似的东西(重要的是key_a和key_b等列名顺序): 我试过了: 随时提出任何其他问题。 问题答案: 按照此答案,您需要显式指定列顺序: 当然,首先,您需要确保您已订购字典