Как заменить 20% случайных значений строк на 100 в python в одном столбце? - PullRequest
1 голос
/ 27 октября 2019

Как заменить 20% случайных значений строк на 100 в python в одном столбце (Рейтинг) в кадре данных?

Ответы [ 2 ]

1 голос
/ 27 октября 2019

Используйте Series.sample с frac=0.2. Затем используйте loc для выбора этих индексов и замените их значение на 100:

# example dataframe
import random
df = pd.DataFrame({'Col1':[random.randint(1,10) for x in range(10)],
                   'Col2':[random.randint(1,10) for x in range(10)]})
print(df)

   Col1  Col2
0     1     3
1     1     6
2     3     9
3     9     5
4    10     4
5    10     2
6    10     7
7     4     5
8    10     7
9    10     9
idx = df['Col1'].sample(frac=0.2).index
df.loc[idx, 'Col1'] = 100

   Col1  Col2
0   100     3
1     1     6
2   100     9
3     9     5
4    10     4
5    10     2
6    10     7
7     4     5
8    10     7
9    10     9

Или, чтобы сделать его более общим, без жесткого кодирования 0.2 и 100, вот функциякоторый возвращает желаемый фрейм данных:

def replace_sample(dataframe, column, fraction, val_replace):
    idx = dataframe[column].sample(frac=fraction).index
    dataframe.loc[idx, column] = val_replace

    return dataframe

replace_sample(df, 'Col1', 0.2, 100)

   Col1  Col2
0     2     5
1     5     1
2     4     3
3    10    10
4   100     5
5     6     7
6    10     1
7     8     8
8   100     9
9     2     7
1 голос
/ 27 октября 2019

Попробуйте использовать sample и loc:

l = df['Rating'].sample(int((20/len(df))*100)).tolist()
df.loc[df['Rating'].isin(l),'Rating'] = 100
print(df)
...