Pandas技术求助:为DataFrame新增每日金额占比列Pct_Day
解决Pandas计算每日金额占比的问题
别慌,这个Pandas操作其实没那么复杂,我来帮你搞定!核心思路就是先算出每个日期的总金额,再让每个ID的金额除以对应日期的总金额就行。
步骤1:先还原示例数据
先把你提到的示例DataFrame构造出来,方便演示:
import pandas as pd data = { 'Date': ['8/7/17', '8/7/17', '8/7/17'], 'ID': [553, 554, 555], 'Amount': [3, 4, 5] } df = pd.DataFrame(data)
步骤2:生成每日占比列
这里用groupby配合transform方法就很合适——transform会把分组计算的结果广播回原DataFrame的每一行,刚好匹配我们的需求:
# 新增Pct_Day列,计算每个ID金额占当日总金额的比例 df['Pct_Day'] = df['Amount'] / df.groupby('Date')['Amount'].transform('sum')
最终结果
运行后你的DataFrame会变成这样:
| Date | ID | Amount | Pct_Day |
|---|---|---|---|
| 8/7/17 | 553 | 3 | 0.25 |
| 8/7/17 | 554 | 4 | 0.333333 |
| 8/7/17 | 555 | 5 | 0.416667 |
完全符合你要的第一行3/(3+4+5)=0.25的要求。如果你的实际数据包含多个日期,这个方法也会自动处理每个日期的分组计算,不用额外写循环~
内容的提问来源于stack exchange,提问作者Z_D
相关产品推荐
相关产品推荐

