【问题标题】:How to create a numpy array (or pandas dataframe) of a certain length using for-loop?如何使用for循环创建一定长度的numpy数组(或pandas数据框)?
【发布时间】: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,我们可以对其进行整形。

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

【问题讨论】:

    标签: python python-3.x pandas numpy numpy-ndarray


    【解决方案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'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2014-10-29
      • 2019-09-11
      • 1970-01-01
      相关资源
      最近更新 更多