合并两个按月分组的DataFrame并计算占比
合并两个按不同日期分组的统计结果并计算占比
现有分组统计代码
你已通过以下代码分别按Data przyjęcia和Data GW字段的月份(yyyy-mm格式)统计了唯一NIP dłużnika的数量:
przyjecia = df.groupby(pd.to_datetime(df['Data przyjęcia']).dt.to_period('M'))['NIP dłużnika'].nunique() gw = df.groupby(pd.to_datetime(df['Data GW']).dt.to_period('M'))['NIP dłużnika'].nunique()
已知分组结果
- Data GW分组:
- 2023-01: 345
- 2023-02: 234
- 2023-03: 344
- Data przyjęcia分组:
- 2023-01: 1736
- 2023-02: 1614
- 2023-03: 1728
解决方案代码
直接合并两个分组结果并计算百分比列:
import pandas as pd # 若已有przyjecia和gw两个Series,可跳过模拟数据部分 # 模拟分组结果 przyjecia = pd.Series( [1736, 1614, 1728], index=pd.PeriodIndex(['2023-01', '2023-02', '2023-03'], freq='M'), name='Data przyjęcia统计数' ) gw = pd.Series( [345, 234, 344], index=pd.PeriodIndex(['2023-01', '2023-02', '2023-03'], freq='M'), name='Data GW统计数' ) # 按日期索引合并,重置索引将日期转为列 merged_df = pd.concat([przyjecia, gw], axis=1).reset_index(names='日期') # 计算百分比(保留两位小数) merged_df['Data GW统计数/Data przyjęcia统计数的百分比'] = ( merged_df['Data GW统计数'] / merged_df['Data przyjęcia统计数'] * 100 ).round(2) # 查看结果 print(merged_df)
最终输出表格
| 日期 | Data przyjęcia统计数 | Data GW统计数 | Data GW统计数/Data przyjęcia统计数的百分比 |
|---|---|---|---|
| 2023-01 | 1736 | 345 | 19.87 |
| 2023-02 | 1614 | 234 | 14.50 |
| 2023-03 | 1728 | 344 | 19.91 |
补充说明
- 如果某月份仅存在其中一组数据,合并后对应位置会出现
NaN,可添加fillna(0)处理:merged_df = pd.concat([przyjecia, gw], axis=1).fillna(0).reset_index(names='日期') - 若需将日期转为字符串格式,执行:
merged_df['日期'] = merged_df['日期'].astype(str)
内容的提问来源于stack exchange,提问作者Grzegorz Z
相关产品推荐
相关产品推荐

