gpt4 book ai didi

python - 在 ", "上连接 3D pandas 数组中的值,使其成为 2D 数组

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:32 24 4
gpt4 key购买 nike

我有一个 3D 数据帧,我想获取 z 轴上一个 x,y 索引的所有值,其中 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'

最佳答案

使用.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'

关于python - 在 ", "上连接 3D pandas 数组中的值,使其成为 2D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55632111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com