更改特定单元格后强制重新计算数据帧

时间:2018-11-02 20:22:13

标签: pandas

我从一个简单的

开始
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 :(得分:2)

制作一个计算它的函数

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