我有一个查找数据框如下:
String Length
0 A 2
1 B 4
2 C 3
3 D 2
我有一个输入数据框如下:
Input
0 A20
1 B1611
2 C001
3 D18
我希望获得如下输出:
Output
0 C300
1 B2718
2 C421
3 A17
其中B2718
是B与随机值2718连接,后者是4位int,长度4是从查找的“长度”列获得的。
我写了以下代码:
def random_with_N_digits(n):
range_start = 10**(n-1)
range_end = (10**n)-1
return randint(range_start, range_end)
def r_funct(lookup):
r_list = []
for index, row in lookup.iterrows():
r_int= random_with_N_digits(row.Length)
r_str=row.String+str(r_int)
r_list.append(r_str)
return r_list
out_df = r_funct(lookup)
out_df = pd.DataFrame(out_df, columns=['Output'])
out_df = out_df.sample(n=in_df.size)
print(out_df)
但是我无法在每次运行时获得相同的输出数据帧(out_df)。
请建议。
答案 0 :(得分:0)
这是np.random.randint
与pd.Series.apply
一起使用的一种方式。
注意我假设没有重新排序,这似乎暗示了你想要的输出。
np.random.seed(0)
def random_num(i):
return str(np.random.randint(10**(i-1), 10**i))
df['Value'] = df['String'] + df['Length'].apply(random_num)
print(df)
String Length Value
0 A 2 A42
1 B 4 B3708
2 C 3 C906
3 D 2 D13