基于双ID合并表格行并按双列排序的技术实现问询
解决方案:基于EAN与album_id合并表格行并排序
嘿,这个表格处理需求用Python的Pandas库就能轻松搞定,它在分组聚合、列操作和排序上效率超高。我给你整理了完整的实现方案,一步一步来:
完整代码示例
import pandas as pd # 加载原始数据(如果是从CSV/Excel读取,替换成pd.read_csv("你的文件路径")即可) raw_data = { "EAN": [111, 111, 222, 222], "album_id": [123, 123, 123, 123], "photo": ["64.jpg", "65.jpg", "64.jpg", "65.jpg"] } df = pd.DataFrame(raw_data) # 1. 按EAN+album_id分组,合并同组的photo为逗号分隔的字符串 merged_df = df.groupby(["EAN", "album_id"])["photo"].agg(", ".join).reset_index() # 2. 添加primary列:根据EAN值设置1/0(这里以EAN=111作为primary判断条件) merged_df["primary"] = merged_df["EAN"].map(lambda x: 1 if x == 111 else 0) # 3. 按primary降序、EAN升序排序(保证primary=1的行在前,相同primary下按EAN从小到大排) final_df = merged_df.sort_values(by=["primary", "EAN"], ascending=[False, True]).reset_index(drop=True) # 查看结果 print(final_df)
代码逐段解释
- 数据加载:这里用字典构造了你的示例数据,实际使用时换成读取文件的代码就行,比如
pd.read_excel("album_photos.xlsx")。 - 分组合并:
groupby(["EAN", "album_id"])告诉Pandas要同时按这两个ID分组,agg(", ".join)把每组里的所有photo值拼接成一个字符串,reset_index()把分组后的索引转成普通列,避免索引混乱。 - 新增primary列:用
map函数快速判断EAN值,给符合条件的行标记1,其他标记0。如果你的primary判断逻辑有变化,直接修改lambda里的条件就行。 - 排序:
sort_values先按primary降序排列(让标记为1的行排在最前面),再按EAN升序,完全匹配你期望的结果顺序。
执行结果
运行代码后会输出你想要的表格:
| EAN | album_id | photo | primary | |
|---|---|---|---|---|
| 0 | 111 | 123 | 64.jpg, 65.jpg | 1 |
| 1 | 222 | 123 | 64.jpg, 65.jpg | 0 |
如果你的数据量很大也不用担心,Pandas处理几十万行数据都很流畅,完全能满足需求。
内容的提问来源于stack exchange,提问作者Charles




