Как сделать расчет только в некоторых строках моего кадра данных? - PullRequest
0 голосов
/ 18 ноября 2018

Допустим, у меня есть кадр данных только с двумя столбцами и 20 строками, где все значения из первого столбца равны 10, а все значения из второй строки являются случайными процентными числами.

Теперь яхочу умножить первый столбец на процентные значения второго столбца +1, но только через определенные промежутки времени и скопировать последнее значение в следующую строку.

Например, я хочу выполнить эту операцию умножения из строки 5до 10.

Проблема в том, что я не знаю, начинать и заканчивать вычисления в произвольных точках на основе индекса df.

Пример входных данных:

df = pd.DataFrame(np.random.randint(0,10,size=(20, 2)), columns=list('AB'))
df['A'] = 10
df['B'] = df['B'] /100

Что дает:

      A     B
0   10  0.07
1   10  0.02
2   10  0.05
3   10  0.00
4   10  0.01
5   10  0.09
6   10  0.00
7   10  0.02
8   10  0.03
9   10  0.05
10  10  0.05
11  10  0.03
12  10  0.01
13  10  0.09
14  10  0.06
15  10  0.07
16  10  0.01
17  10  0.01
18  10  0.01
19  10  0.07

Вывод, который я хотел бы получить, - это то, где первая строка идет через вычислительное умножение только в рядах свиноматок, например:

      C       B
0   10     0.07
1   10     0.02
2   10     0.05
3   10     0.00
4   10     0.01
5   10,9   0.09
6   10,9   0.00
7   11,11  0.02
8   11,45  0.03
9   12,02  0.05
10  12,62  0.05
11  12,62  0.03
12  12,62  0.01
13  12,62  0.09
14  12,62  0.06
15  12,62  0.07
16  12,62  0.01
17  12,62  0.01
18  12,62  0.01
19  12,62  0.07

Спасибовы!

1 Ответ

0 голосов
/ 18 ноября 2018

Чтобы получить рекурсивный продукт, вы можете сделать следующее:

start = 5
end = 10

df['C'] = ((1+df.B)[start:end+1].cumprod().reindex(df.index[:end+1]).fillna(1)*df.A).ffill()

Выход:

     A     B          C
0   10  0.07  10.000000
1   10  0.02  10.000000
2   10  0.05  10.000000
3   10  0.00  10.000000
4   10  0.01  10.000000
5   10  0.09  10.900000
6   10  0.00  10.900000
7   10  0.02  11.118000
8   10  0.03  11.451540
9   10  0.05  12.024117
10  10  0.05  12.625323
11  10  0.03  12.625323
12  10  0.01  12.625323
13  10  0.09  12.625323
14  10  0.06  12.625323
15  10  0.07  12.625323
16  10  0.01  12.625323
17  10  0.01  12.625323
18  10  0.01  12.625323
19  10  0.07  12.625323

Пояснение:

Рассчитайте совокупное произведение (1 + df.B), которое является множителем для умножения на df.A для получения рекурсивного произведения. Делайте это только в указанном диапазоне. reindex и заполните строки перед start 1, чтобы значение оставалось постоянным до этого диапазона.

Умножьте на df.A, чтобы получить фактическое значение, передайте значения заполнения после указанного диапазона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...