python - 如何将 ndarray 转换为“高”的 Pandas DataFrame
问题描述
我正在做的一些工作会产生不同维度的输出张量(numpy ndarray),具体取决于我感兴趣/想要随时间绘制的内容,有时我可能会选择年龄组和性别作为我的目标,这将产生 3D我们拥有的张量
age_groups[
genders[
days[Value, ..., Value],
days[Value, ..., Value]
],
...,
genders[
days[Value, ..., Value]
days[Value, ..., Value]
],
]
我的问题是,我怎样才能最有效地将其转换为如下所示的数据框:
Age_Group Gender Day Value
0 1 M 1 blah
1 1 F 1 blah
2 1 M 2 blah
4 1 F 2 blah
5 1 M 3 blah
6 1 F 3 blah
7 1 M 4 blah
...
n 5 F 21 blah
如果我添加另一个目标来分组,我如何确保它可以推广到,比如头发颜色,以便将另一列添加到生成的 df 中?
对不起,如果这个问题有点抽象,我希望我能清楚地说明我的问题,如果不是,我可以尝试进一步澄清。
解决方案
您可以从阵列的扁平版本创建 MultiIndex 数据框。在 3D 数组的每个索引处,变量的值是什么并没有真正的指示,但假设是任意顺序:
arr = np.arange(4*2*21).reshape(4, 2, 21) # example array
ix = pd.MultiIndex.from_product(
[[1, 2, 3, 4], ['M', 'F'], np.arange(1, 22)],
names=['Age_Group', 'Gender', 'Day']
)
df = pd.DataFrame(arr.flatten(), index=ix, columns=['Value'])
输出:
Age_Group Gender Day Value
0 1 M 1 0
1 1 M 2 1
2 1 M 3 2
3 1 M 4 3
4 1 M 5 4
.. ... ... ... ...
163 4 F 17 163
164 4 F 18 164
165 4 F 19 165
166 4 F 20 166
167 4 F 21 167
如果每个索引处变量值的顺序不同,只需更改函数的输入from_product
以匹配您的数组。
推荐阅读
- python - TypeError:列表索引必须是整数或切片,而不是 str,同时调用列号的输入
- sql - 使用 SQL JOIN 或类似语句作为报告的记录源进行访问
- c# - 为什么 Entity Framework 会添加相关记录,即使它已经存在于数据库中?
- java - 有没有办法模拟慢速标准输入/输出?
- javascript - 如何获得具有嵌套数组的数组,其元素具有唯一顺序?
- class - BeautifulSoup 从所有 div 类中提取文本,包括子元素
- assembly - 程序集是特定于 CPU、CPU 架构还是其他什么?
- python - Python Tkinter 文本插入方法
- c# - 在 Visual Studio 2017 上检查非托管 C++ 对象/变量
- python - 如何在 cog discordpy 中卸载命令?