根据列(pandas)中的唯一值追加值

时间:2017-07-01 20:13:18

标签: pandas dataframe

我有一个列col,可以多次列出值。

对于col_a中的每个不同值,我想在col_b中生成相应的随机值。 像这样:

col_a  col_b
A     0.25
A     0.25
B     0.12
B     0.12

如何生成col_b?

3 个答案:

答案 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