使用Pandas'添加一个Rand到每一行。分配和Lambda函数

时间:2018-02-01 08:13:03

标签: python pandas random lambda assign

如何将随机数传递给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 个答案:

答案 0 :(得分:2)

更改1,因为length的{​​{1}}将标量返回到数组:

DataFrame
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]