对数组的唯一值进行迭代操作
Iterating operations over unique values of an array
我有一个 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])
我愿意:
- 对
x
、 中的每个唯一值使用相同的抽奖 z
- 将上述步骤中的输出与唯一项
x
相乘
有什么建议吗?
解释:
- 生成
n=100
次抽奖以获得 z
使得 len(z)=100
- 对于
z
中的每个elem
,计算函数fun
,
- 对于
df.x.unique()
中的i
,按元素计算步骤(2)中输出的乘积。我期待得到一个 DataFrame 或维度数组 (len(df.x.unique(), n=100)
4.
听起来你想按 'x' 分组,取其中一个实例(假设我们取第一个观察到的实例)。
只需按如下方式调用您的函数:
f = fun(df.groupby('x').first())
>>> f.shape
Out[25]: (4, 100)
>>> len(df.x.unique()
Out[26]: 4
我有一个 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])
我愿意:
- 对
x
、 中的每个唯一值使用相同的抽奖 - 将上述步骤中的输出与唯一项
x
相乘
z
有什么建议吗?
解释:
- 生成
n=100
次抽奖以获得z
使得len(z)=100
- 对于
z
中的每个elem
,计算函数fun
, - 对于
df.x.unique()
中的i
,按元素计算步骤(2)中输出的乘积。我期待得到一个 DataFrame 或维度数组 (len(df.x.unique(), n=100)
4.
听起来你想按 'x' 分组,取其中一个实例(假设我们取第一个观察到的实例)。
只需按如下方式调用您的函数:
f = fun(df.groupby('x').first())
>>> f.shape
Out[25]: (4, 100)
>>> len(df.x.unique()
Out[26]: 4