Принудительный пересчет кадра данных после смены конкретной ячейки - PullRequest
0 голосов
/ 02 ноября 2018

Я начинаю с простого

df = pd.DataFrame({'units':[30,20]})

И я получаю

      units
 0      30
 1      20

Затем я добавляю строку к итоговому столбцу:

my_sum = df.sum()
df = df.append(my_sum, ignore_index=True)

Наконец, я добавляю столбец для вычисления процентов от столбца 'единиц':

df['pct'] = df.units / df.units[:-1].sum()

заканчивается этим:

    units   pct
 0  30     0.6
 1  20     0.4
 2  50     1.0

Пока все хорошо - но теперь вопрос: я хочу изменить среднее число единиц с 20 на, например, 30. Я могу использовать это:

df3.iloc[1, 0] = 40

или

df3.iat[1, 0] = 40

, которые изменяют ячейку, но вычисленные значения как в последней строке, так и во втором столбце не изменяются, чтобы отразить ее:

    units   pct
 0  30      0.6
 1  40      0.4
 2  50      1.0

Как заставить эти вычисленные значения корректироваться после изменения в этой конкретной ячейке?

1 Ответ

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

Сделать функцию, которая его вычисляет

def f(df):
  return df.append(df.sum(), ignore_index=True).assign(
      pct=lambda d: d.units / d.units.iat[-1])

df.iat[1, 0] = 40

f(df)

   units       pct
0     30  0.428571
1     40  0.571429
2     70  1.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...