对数组的唯一值进行迭代操作

问题描述 投票:0回答:1

我有一个 pandas 数据框,类似于如下生成的数据框。

import numpy as np
import pandas as pd

x0 = pd.DataFrame(np.random.normal(size=(10, 4)))
x1 = pd.DataFrame({'x': [1,1,2,3,2,3,4,1,2,3]})
df = pd.concat((x0, x1), axis=1)

还有一个函数:

def fun(df, n=100):
    z = np.random.normal(size=n)    
    return np.dot(df[[0,1,2,3]], [0.5*z,-1*z,0.3*z,1.2*z])

我愿意:

  • z
     中的每个唯一值使用相同的抽奖 
    x
  • 将上述步骤中的输出乘以唯一的
    x

有什么建议吗?

解释

  1. 生成
    n=100
    绘制得到
    z
    ,使得
    len(z)=100
  2. 对于
    elem
    中的每个
    z
    ,评估函数
    fun
    ,
  3. 对于
    i
    中的
    df.x.unique()
    ,按元素计算步骤 (2) 中输出的乘积。我期望获得一个 DataFrame 或维度数组 (len(df.x.unique(), n=100)
  4. 4.
python-2.7 python-3.x numpy pandas iterator
1个回答
0
投票

听起来您想按“x”进行分组,采用其中一个实例(假设我们采用观察到的第一个实例)。

只需按如下方式调用您的函数即可:

f = fun(df.groupby('x').first())

>>> f.shape
Out[25]: (4, 100)

>>> len(df.x.unique())
Out[26]:  4
© www.soinside.com 2019 - 2024. All rights reserved.