我从一个简单的
开始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
如何强制这些计算值随特定单元格的变化而调整?
答案 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