您可以使用 groupby 对象上的 apply 来执行此操作:
import pandas as pd
import numpy as np
cols = ['index', 'date', 'part', 'receipt', 'bad_dollars', 'total_dollars',
'bad_percent']
sample_data = pd.DataFrame([
[0, 1, 123, 22, 40, 100, np.nan],
[1, 2, 456, 44, 80, 120, np.nan],
[2, 3, 134, 33, 30, 150, np.nan],
[3, 1, 123, 22, 80, 100, np.nan],
[4, 5, 456, 45, 40, 90, np.nan],
[5, 3, 134, 33, 85, 150, np.nan],
[6, 7, 123, 24, 70, 120, np.nan],
[7, 5, 456, 45, 20, 85, np.nan],
[8, 9, 134, 35, 50, 300, np.nan],
[9, 7, 123, 24, 300, 600, np.nan]],
columns = cols).set_index('index', drop = True)
sample_data_group = sample_data.groupby(['date','part','receipt'])
xx = sample_data_group.apply(
lambda x: x.assign(bad_percent = x.bad_dollars/x.total_dollars))\
.reset_index(['date','part', 'receipt'], drop = True)