python - 在 groupby 函数之后合并两个不同大小的数据帧
问题描述
我正在尝试将 groupby 过滤数据帧与原始数据帧相关联。完成 groupby 后,我丢失了原始数据框中的一些列。我们的想法是将其与各自的 STATE 和 CITY 值相关联。但是当我尝试重新关联时,数据框会恢复到正常大小,有 17 行。我只想要原始数据帧的接口到包含 9 行的最终数据帧。
原始数据框:
| COD |STATE| CITY | AZIM | SET|TEC|
0 |ALAAD_0001 |AL |MAC |0 |1 |4 |
1 |ALAAD_0001 |AL |MAC |120 |2 |4 |
2 |ALAAD_0001 |AL |MAC |120 |2 |4 |
3 |ALAAD_0001 |AL |MAC |240 |3 |4 |
4 |BAPID_0001 |BA |SAL |20 |1 |2 |
5 |BAPID_0001 |BA |SAL |20 |1 |2 |
7 |BAPID_0001 |BA |SAL |100 |2 |2 |
8 |BAPID_0001 |BA |SAL |210 |3 |2 |
9 |BAPID_0001 |BA |SAL |250 |3 |2 |
10 |BAPID_0001 |BA |SAL |250 |3 |2 |
11 |CEMBC_0003 |CE |FOR |90 |1 |4 |
12 |CEMBC_0003 |CE |FOR |80 |1 |4 |
13 |CEMBC_0003 |CE |FOR |160 |2 |4 |
14 |CEMBC_0003 |CE |FOR |160 |2 |4 |
15 |CEMBC_0003 |CE |FOR |170 |2 |4 |
16 |CEMBC_0003 |CE |FOR |280 |3 |4 |
分组后:
| COD |TEC |SET |AZIM|
0 |ALAAD_0001 |4 |1 |0 |
1 |ALAAD_0001 |4 |2 |120 |
2 |ALAAD_0001 |4 |3 |240 |
3 |BAPID_0001 |2 |1 |20 |
4 |BAPID_0001 |2 |2 |100 |
5 |BAPID_0001 |2 |3 |250 |
6 |CEMBC_0003 |4 |1 |90 |
7 |CEMBC_0003 |4 |2 |160 |
8 |CEMBC_0003 |4 |3 |280 |
df_cut = (
df.groupby(["COD","TEC","SET"])
.AZIM
.agg(lambda x: pd.Series.mode(x).max())
.reset_index()
)
预期输出:
| COD | TEC | SET |AZIM | STATE | CITY |
0 |ALAAD_0001 |4 |1 |0 | AL |MAC |
1 |ALAAD_0001 |4 |2 |120 | AL |MAC |
2 |ALAAD_0001 |4 |3 |240 | AL |MAC |
3 |BAPID_0001 |2 |1 |20 | BA |SAL |
4 |BAPID_0001 |2 |2 |100 | BA |SAL |
5 |BAPID_0001 |2 |3 |250 | BA |SAL |
6 |CEMBC_0003 |4 |1 |90 | CE |FOR |
7 |CEMBC_0003 |4 |2 |160 | CE |FOR |
8 |CEMBC_0003 |4 |3 |280 | CE |FOR |
解决方案
我们使用内部连接来合并两个数据帧,因为原始 df 在合并键上有重复,所以它返回重复值。drop_duplicates()派上用场来解决这个问题。
代码
df_cut.merge(df.drop_duplicates(), on=["COD","TEC","SET", "AZIM"])
输出
COD TEC SET AZIM STATE CITY
0 ALAAD_0001 4 1 0 AL MAC
1 ALAAD_0001 4 2 120 AL MAC
2 ALAAD_0001 4 3 240 AL MAC
3 BAPID_0001 2 1 20 BA SAL
4 BAPID_0001 2 2 100 BA SAL
5 BAPID_0001 2 3 250 BA SAL
6 CEMBC_0003 4 1 90 CE FOR
7 CEMBC_0003 4 2 160 CE FOR
8 CEMBC_0003 4 3 280 CE FOR
推荐阅读
- botframework - 对话框堆栈不会重置
- android - 如何处理我的列表中存在的“阅读更多”按钮单击
- asp.net-core - EF Core 2.1 集成测试中的延迟加载
- linux - crontab 未按计划时间运行
- sql-server - 使用 where 条件查询 XML 节点
- angular - 无法绑定到“占位符”,因为它不是“ng-multiselect-dropdown”的已知属性
- javascript - 究竟在哪里添加序列化钩子(emberJS)
- python - 使用递归和三个参数的排列
- angular - 根据其他 observable 最近过去的消息进行过滤
- angular - 角度@material/layout-grid