使用 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 标量由 DataFrame
的 length
数组:
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
如何将随机数传递给 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 标量由 DataFrame
的 length
数组:
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