【问题标题】:Joining values in 3D pandas array on ", ", making it a 2D array在“,”上连接 3D 熊猫数组中的值,使其成为 2D 数组
【发布时间】:2019-09-02 01:36:14
【问题描述】:

我有一个 3D 数据帧,我想获取一个 x,y 索引的所有值跨 z 轴,这里的 z 轴在原始 2D 数据帧之间移动。我能够想象它的方式虽然如果我弄错了请原谅我,因为它有点奇怪,如果我得到 x=0, y=0 的 x,y 的向量,它将是 [1, 5, 3]。

所以我的结果将是一个数据帧,其中 df_2d[0][0] 将是一个字符串“1, 5, 3”,依此类推,取 3D 数据帧中的所有值。

有没有什么方法可以在不循环遍历每个单元格索引并显式访问值的情况下实现这一点?

数据框定义为:

import pandas as pd

columns = ['A', 'B']
index = [1, 2, 3]

df_1 = pd.DataFrame(data=[[1, 2], [99, 57], [57, 20]], index=index, columns=columns)
df_2 = pd.DataFrame(data=[[5, 6], [78, 47], [21, 11]], index=index, columns=columns)
df_3 = pd.DataFrame(data=[[3, 4], [66, 37], [33, 17]], index=index, columns=columns)

df_3d = pd.concat([df_1, df_2, df_3], keys=['1', '2', '3'])

然后我要获取原始数据:

print(df_3d.xs('1'))

print(df_3d.xs('2'))

print(df_3d.xs('3'))



    A   B
1   1   2
2  99  57
3  57  20

    A   B
1   5   6
2  78  47
3  21  11

    A   B
1   3   4
2  66  37
3  33  17

再次澄清一下,如果查看此打印,我希望有一个组合数据框,如下所示:

    A              B
1  '1, 5, 3'     '2, 6, 4'
2  '99, 78, 66'  '57, 47, 37'
3  '57, 21, 33'  '20, 11, 17'

【问题讨论】:

  • 嘿。只是想了解您要访问哪些单元格。 df_3d.xs('1') df_3d.xs('2') df_3d.xs('3') ??
  • 请查看带有输出样本的更新问题。

标签: python pandas dataframe multidimensional-array


【解决方案1】:

使用.xs 获取每个级别的数据帧,使用reduce 将所有数据帧组合在一起。

from functools import reduce

# Get each level values
dfs = [df_3d.xs(i) for i in df_3d.index.levels[0]]

df = reduce(lambda left,right: left.astype(str) + ", " + right.astype(str), dfs)

df
            A           B
1     1, 5, 3     2, 6, 4
2  99, 78, 66  57, 47, 37
3  57, 21, 33  20, 11, 17

如果您想要',您可以使用applymap 将函数应用于每个元素。

df.applymap(lambda x: "'" + x + "'")

              A             B
1     '1, 5, 3'     '2, 6, 4'
2  '99, 78, 66'  '57, 47, 37'
3  '57, 21, 33'  '20, 11, 17'

df = "'" + df + "'"

df
              A             B
1     '1, 5, 3'     '2, 6, 4'
2  '99, 78, 66'  '57, 47, 37'
3  '57, 21, 33'  '20, 11, 17'

【讨论】:

  • 太好了,非常感谢您的回答。但是,在这里,您通过将 dfs 放入列表中来制作 df 3D,而不是像我的示例中所示的组合数据框。
  • @simernes 已编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 2019-09-16
  • 2016-03-23
  • 2016-12-23
相关资源
最近更新 更多