我有一个数据帧,看起来像这样:
Company Speciality Payment
AcmeCorp Roofing 50.00
AcmeCorp Grounding 50.00
LolCorp Roofing 106.00
LolCorp Grounding 94.00
我想添加一个百分比列,如下所示:
^{pr2}$最好的办法是什么?在
我可以用这样的方法把事情搞得一团糟:
df_m = df.groupby('Company').sum()
final_df = pd.merge(df, df_m, on='Company', suffixes=('Raw', 'Total))
final_df['Percent of Total Payment] = final_df['Payment Raw'] / final_df['Payment_Total']
但我想知道有没有更有效的方法。在
使用
groupby/transform
生成与原始数据帧长度相同的列。这允许您避免调用pd.merge
。在收益率
^{pr2}$尽管
可以简化成一个直线
因为像
.transform('sum')
这样的内置操作比使用自定义函数(例如.transform(lambda x: x/x.sum())
)的操作更快,所以两行版本更快(尤其是对于大型数据帧)当然,两行版本也可以写成
在速度没有损失的情况下,少了一个命名变量,但可能更难阅读。在
下面是一个100K行数据帧的基准测试:
这是用于执行基准测试的设置。在
相关问题 更多 >
编程相关推荐