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

高效扁平化熊猫数据框

仲孙鸿畴
2023-03-14
问题内容

我有一个熊猫数据框。看起来像这样:

pd.DataFrame(data=np.arange(1,10).reshape(3,3), index=['A', 'B', 'C'], columns=['A', 'B', 'C'])

但有100行和100列。

我想展平它,使其看起来像这样:

pd.DataFrame({'row' : ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], 'col' : ['A', 'B', 'C']*3, 'val' : np.arange(1,10)})

最有效的方法是什么?

谢谢,

插口


问题答案:

选项1
无法100%确定效率,但最简单的方法是使用 df.melt

df.rename_axis('row')\
  .reset_index()\
  .melt('row', value_name='val', var_name='col')\
  .sort_values(['row', 'col'])

  row col  val
0   A   A    1
3   A   B    2
6   A   C    3
1   B   A    4
4   B   B    5
7   B   C    6
2   C   A    7
5   C   B    8
8   C   C    9

选项2
另一个简单的选项 stack -

v = df.stack().reset_index()
v.columns=['row', 'col', 'val']
v

要么,

df.stack().rename_axis(['row', 'col']).reset_index(name='val')



  row col  val
0   A   A    1
1   A   B    2
2   A   C    3
3   B   A    4
4   B   B    5
5   B   C    6
6   C   A    7
7   C   B    8
8   C   C    9


 类似资料:
  • 我有一个类别树,由以下内容表示。 这给出了一个dataframe,如下所示: 树中最高的节点的parent_id等于-1,因此树可以用图形表示如下: 我需要生成以下DataFrame。 该树是动态生成的,可以具有任意数量的级别,因此下面的树 应产生以下结果:

  • 我有以下熊猫系列 我需要将此更正为csv。但我需要列表中的每个项目作为单独的列。例如:在第一行中,1、11283、1、5应该是单独的列

  • 如何将一个简单的(即没有嵌套结构的)数据表扁平化为列表?我的习题集是检测从节点对表中更改/添加/删除的所有节点对。 这意味着我有一个“before”和“after”表要比较。将before和after dataframe组合在一起生成的行描述了一对数据在一个dataframe中出现而在另一个dataframe中不出现的位置。 单独且不同地合并所有列 平面地图和不同的 映射和展平 由于结构是众所周知

  • 我有一个熊猫数据框,它有语料库的术语频率,术语为行,年份为列,就像这样: 我希望能够通过将每个单词的值除以给定年份的总单词数来标准化它们——有些年份包含两倍多的文本,所以我试图按年缩放(像谷歌图书一样)。我已经看了如何缩放单个列的例子,克里斯·阿尔邦和我在SO上看到了缩放所有列的例子,但是每次我试图将这个数据框转换为一个数组来缩放时,事情都会窒息列这个词不是数字。(我尝试将术语列设置为索引,但不太

  • 问题内容: 假设我有一个熊猫数据框: 我想计算数据框的列均值。 这很简单: 然后按列范围max(col)-min(col)。这又很容易: 现在,对于每个元素,我要减去其列的均值并除以其列的范围。我不确定该怎么做 任何帮助/指针将不胜感激。 问题答案:

  • 问题内容: 我正在尝试将json文件加载到熊猫数据框。我发现有一些嵌套的json。以下是示例json: 我使用以下代码将json加载到数据帧中: 以下是df.head()的输出 但是我发现了两个嵌套的列,例如位置和标签。 我尝试使用以下代码对其进行展平: 它显示了如下错误: 您能建议我如何展平位置和标签(那些具有嵌套数据的位置和标签)。 谢谢,Zep 问题答案: 如果您正在寻找一种更通用的方法来从