使用 Pandas' Assign 和 Lambda 函数向每一行添加一个 Rand

Add a Rand to each row using Pandas' Assign and a Lambda Function

如何将随机数传递给 lambda 函数,以便 pandas assign 可以使用我为每一行添加不同的随机数。

我的原创尝试​​,

df = pd.DataFrame({'cat': [1]*10 + [0]*10,
                   'value': [3]*5 + [2]*5 + [2]*2 + [3]*8})

df.assign(cat=lambda df: df.cat + np.random.rand(1)).head(3)

Out[1]:
     cat        value
0   1.962857    3
1   1.962857    3
2   1.962857    3

我们在这里看到随机数 0.962857 已添加到所有行。但我希望每一行都有不同的 rand 。我该怎么做?

更改 1,因为 return 标量由 DataFramelength 数组:

print (np.random.rand(1))
[ 0.88642869]

print (np.random.rand(len(df)))

[ 0.42677701  0.89968857  0.87976326  0.07758206  0.43617027  0.03221375
  0.46398119  0.14226246  0.14237448  0.22679517  0.60271752  0.85003435
  0.5676184   0.87565266  0.89830548  0.27066452  0.23907483  0.73784657
  0.09083235  0.98984701]

df = df.assign(cat=lambda df: df.cat + np.random.rand(len(df))).head(3)
print (df)
        cat  value
0  1.886429      3
1  1.426777      3
2  1.899689      3