Выборка строк с размером выборки больше длины DataFrame - PullRequest
0 голосов
/ 05 января 2019

Меня просят сгенерировать новую переменную на основе данных из старой. По сути, меня спрашивают, что я беру случайные значения (используя функцию random) из исходного и получаю как минимум в 10 раз больше наблюдений, чем старое, а затем сохраняю это как новую переменную.

Это мой набор данных: https://archive.ics.uci.edu/ml/machine-learning-databases/forest-fires/forestfires.csv

Переменная, с которой я хочу работать, это area

Это моя попытка, но она дает мне module object is not callable ошибку:

import pandas as pd
import random as rand

dataFrame = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/forest-fires/forestfires.csv")

area = dataFrame['area']

random_area = rand(area)

print(random_area)

1 Ответ

0 голосов
/ 05 января 2019

Вы можете использовать функцию sample с replace=True:

df = df.sample(n=len(df) * 10, replace=True)

Или, для выборки только столбец площади, используйте

area = df.area.sample(n=len(df) * 10, replace=True)

Другой вариант будет включать np.random.choice и будет выглядеть примерно так:

df = df.iloc[np.random.choice(len(df), len(df) * 10)]

Идея состоит в том, чтобы генерировать случайные индексы из 0- len(df)-1. Первый аргумент определяет верхнюю границу, а второй (len(df) * 10) указывает количество генерируемых индексов. Затем мы используем сгенерированные индексы для индексации в df.

Если вы просто хотите получить area, этого достаточно.

area = df.iloc[np.random.choice(len(df), len(df) * 10), df.columns.get_loc('area')]

Index.get_loc преобразует метку "area" в позицию для iloc.


df = pd.DataFrame({'A': list('aab'), 'B': list('123')})
df
   A  B
0  a  1
1  a  2
2  b  3

# Sample 3 times the original size
df.sample(n=len(df) * 3, replace=True)

   A  B
2  b  3
1  a  2
1  a  2
2  b  3
1  a  2
0  a  1
0  a  1
2  b  3
2  b  3

df.iloc[np.random.choice(len(df), len(df) * 3)]

   A  B
0  a  1
1  a  2
1  a  2
0  a  1
2  b  3
0  a  1
0  a  1
0  a  1
2  b  3
...