如何使用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
【讨论】:
如何在此处添加第三列?在上面的例子中,它是索引列,但在我的代码中,它是另一个结果,所以我需要它作为另一个列。 @NewbieAFdf0.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 循环中删除和添加 numpy 数组行以从更大的 numpy 数组创建动态子数组,