我有一个3D数据框,我想在z轴上获得一个x,y索引的所有值,这里的z轴在原始2D数据框之间移动。我能够想象的方式虽然可以原谅我,但如果我弄错了也可以原谅我,因为我觉得它有点怪异,但是如果我得到x = 0,y = 0的x,y的向量,那将是[1、5、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'
答案 0 :(得分:0)
使用onInterfaceStats
获取每个级别的数据帧,并使用.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 + "'"