通过唯一整数将 numpy 数组值作为列添加到 DataFrame

Posted

技术标签:

【中文标题】通过唯一整数将 numpy 数组值作为列添加到 DataFrame【英文标题】:Add numpy array values as columns to DataFrame by unique integer 【发布时间】:2019-04-21 17:49:42 【问题描述】:

如果我有一个充满整数的 3xn numpy 数组,我怎么能像这样轻松地将这些整数添加到 DataFrame 中:

输入:

a = np.array(array([[2,10, 8],[2,9,4],[8,2,2],[8,9,10],[2,3,8]])

输出:

首先创建空 DataFrame,列是 numpy 数组中的每个唯一整数。

在这个新 DataFrame 的每一行中,我需要将 numpy 数组中的每一行附加到唯一列。每个新整数都应该变成一列,分别包含整行。

在到达数组中的 [2,3,8] 之前应该看起来像这样:

Column:    2       4       8        9       10
R      |[2,9,4]|[8,2,2]|[2,9,4] |[8,2,2]| [2,9,4] |
O       [8,2,2]         [2,3,8]  [2,3,8]  [2,3,8]
W:      [8,9,10]        

由于 numpy 数组中的最后一个条目中有一个 3,而 3 尚未在列列表中,我想为其创建一个新列。

例如,如果数组中[2,3,8] 之后的下一项是[1,89,2],那么 DataFrame 现在应该如下所示:

Column:    2       4       8        9       10         3        1     89
R      |[2,9,4]|[8,2,2]|[2,9,4] |[8,2,2]| [2,9,4] | [1,89,2] |     |     |
O       [8,2,2]         [2,3,8]  [2,3,8]  [2,3,8]
W:      [8,9,10]        [1,89,2]
        [1,89,2]        [8,9,10]

1 和 89 现在被创建为等待 numpy 数组中的下一项的行。

然后第 1、89 和 2 列将包含下一项,依此类推。希望这更清楚。

从技术上讲,我并不关心数据是如何存储的,起初我假设是一个字典,但当我现在看它时,DataFrame 更有意义。如果列表、字典或其他我不知道的功能有更好的方法,请告诉我现在是否有意义。

第二次编辑:

抱歉给大家带来了困惑。

【问题讨论】:

您想要的输出甚至不是有效的 Python... 这只是一个例子。我缺少括号和 5: 无效,抱歉。有没有办法把它作为一个有效的字典呢?逻辑可行吗? @JeffreyEly,请编辑以使预期的输出有意义。 即使在这个例子中,你也会发现自己有重复的键,这些键在 python 字典中是不支持的。还是您的想法是避免使用已添加的键? 用更多示例编辑了原始问题。关键是要有一个标签,并将包含接下来 3 个整数的每一新行附加到现有标签中,如果不存在,则将其添加为新键。那可能吗?当我手动执行它时它可以工作,但我无法为整个 numpy 数组找到一种方法。 【参考方案1】:
dict1='2':[[2,9,4],[8,2,2]],'4': [[8,2, 2],[8,9,10]],'8':[[2,9,4],[1,89,2]],'9':[[8,2,2],[2,3,8]],'10': [[2,9,4],[2,3,8]],'3': [[1,89,2],[2,3,8]]

df3=pd.DataFrame(dict1)

我想这会对你有所帮助

【讨论】:

您能否解释一下为什么您认为这会有所帮助? 谢谢,但我需要一个实际函数以这种方式将新数据添加到 DataFrame 或字典中,因为“2”和“4”等值来自实际数组。当我添加新数据时,每个值都应该有自己的标签。虽然我很感激你付出的努力。谢谢。

以上是关于通过唯一整数将 numpy 数组值作为列添加到 DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

Numpy:如何使用数组的最后一个维度作为值?

将数组的列作为向量执行“for循环”时,Cupy 比 numpy 慢

混合类型的 NumPy 数组/矩阵

numpy逻辑运算问题

Numpy:使用字典作为地图有效地替换二维数组中的值

尝试计算 numpy 数组列中的唯一项时出现“IndexError:数组索引过多”