如何使用for循环创建一定长度的numpy数组(或pandas数据框)?

Posted

技术标签:

【中文标题】如何使用for循环创建一定长度的numpy数组(或pandas数据框)?【英文标题】:How to create a numpy array (or pandas dataframe) of a certain length using for-loop? 【发布时间】:2020-10-14 03:18:45 【问题描述】:

我正在尝试创建一个 pandas DataFrame 来收集我拥有的所有内容,但是我很难将列表中的 numpy 数组组合成一个数组。

假设我有以下数据:

df0 = pd.DataFrame([[1,2],[2,2],[3,1],[4,4],[5,4]], columns = ['A','B'])

collect = []
for i in range(5):
    collect.append(df0.mean())
    collect.append((i**2+2))

在这里,我显然通过循环相同的数据帧 5 次使其更简单,但在我的实际数据中,每次迭代都经过数据帧中的不同列。无论如何,我想要一个最终结果:

 A    B   i
3.0  2.6  2
3.0  2.6  3
3.0  2.6  6
3.0  2.6  11
3.0  2.6  18

但我无法创建 5x3 矩阵,因为 len(collect) 是 10。我认为我在 for 循环中没有以正确的方式使用 .append。如何创建一个数组,使len(collect) 为 5 或 15?我在想,如果它的长度为 5,我们可以简单地转置 collect 或者它的长度为 15,我们可以对其进行整形。

编辑:我稍微更改了第三列,以便人们可以看到它与简单的索引列不同。

【问题讨论】:

【参考方案1】:

你可以用transform做到这一点

df0.groupby([1]*len(df)).transform('mean')
   A    B
0  3  2.6
1  3  2.6
2  3  2.6
3  3  2.6
4  3  2.6

【讨论】:

如何在此处添加第三列?在上面的例子中,它是索引列,但在我的代码中,它是另一个结果,所以我需要它作为另一个列。 @NewbieAF df0.groupby([1]*len(df)).transform('mean').reset_index() 第三列不是索引列,它是完全不同结果的列(我知道我在问题的示例中很懒惰),所以这仍然不太有效。我需要使用附加在 for 循环中的特定数字来创建第三列。我编辑了问题以使其更清晰。【参考方案2】:

试试这个:

A_mean, B_mean = df0.mean()
result = [[A_mean, B_mean, i**2+2] for i in range(len(df0))]
collect = pd.DataFrame(result, columns=['A', 'B', 'i'])

【讨论】:

以上是关于如何使用for循环创建一定长度的numpy数组(或pandas数据框)?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到for循环中数组的长度

在 for 循环中删除和添加 numpy 数组行以从更大的 numpy 数组创建动态子数组,

如何使用 Python 多处理 Pool.map 在 for 循环中填充 numpy 数组

不使用循环,如何创建一个长度为100的数组

Python和OpenCV创建超快的“for”像素循环

如何在 for 循环中添加不同大小的 numpy 数组条目(类似于 Matlab 的单元格数组)?