我有一个列col,可以多次列出值。
对于col_a中的每个不同值,我想在col_b中生成相应的随机值。 像这样:
col_a col_b
A 0.25
A 0.25
B 0.12
B 0.12
如何生成col_b?
答案 0 :(得分:3)
您可以为每个组致电random.random()
:
import random
df.groupby('col_a')['col_a'].transform(lambda x: random.random())
Out:
0 0.394776
1 0.394776
2 0.928343
3 0.928343
Name: col_a, dtype: float64
将其分配回来:
df['col_b'] = df.groupby('col_a')['col_a'].transform(lambda x: random.random())
df
Out:
col_a col_b
0 A 0.012639
1 A 0.012639
2 B 0.839752
3 B 0.839752
答案 1 :(得分:0)
我这样做:
import pandas as pd
import random
df['col_b'] = 1
df['col_b'] = df.groupby('col_a')['col_b'].transform(lambda _:random.random())
答案 2 :(得分:0)
为col_a
中的唯一值数量创建数字,并使用因子化版本col_a
u, f = np.unique(df.col_a.values, return_inverse=True)
df.assign(col_b=np.random.rand(u.size)[f])
col_a col_b
0 A 0.470264
1 A 0.470264
2 B 0.836461
3 B 0.836461
对于大数据,这更快
f, u = pd.factorize(df.col_a.values)
df.assign(col_b=np.random.rand(u.size)[f])
col_a col_b
0 A 0.476353
1 A 0.476353
2 B 0.639068
3 B 0.639068