циклически проходя через фрейм данных и генерируя случайный фрейм данных - PullRequest
0 голосов
/ 04 июня 2018

У меня есть кадр данных для поиска следующим образом:

            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-значным целым числом, а длина 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) при каждом запуске.

Пожалуйста, предложите.

1 Ответ

0 голосов
/ 04 июня 2018

Это один из способов использования 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
...