如何在Python或Excel中对音乐标签CSV数据进行分组排序?
如何在Python或Excel中对音乐标签CSV数据进行分组排序?
看起来你是想把不同乐队的音乐标签统一列对齐,让相同标签落在同一列,缺失的位置用NaN填充对吧?我来给你分Python(用Pandas)和Excel两种实用方法详细说下,应该能解决你的需求~
一、Python + Pandas 方法(适合大文件,自动化处理)
因为你提到是大CSV文件,用Python处理会比Excel更高效,而且能重复执行不用手动操作。步骤如下:
- 先读取CSV文件,把乐队名和标签分开处理
- 将分散在多列的标签转换成“一行乐队+一行标签”的长格式
- 用交叉表把标签转成列,对齐每个乐队的标签,缺失的填充NaN
- 可选:按标签出现频率排序列,让高频标签排在前面
直接上可运行的代码,每一步都加了注释:
import pandas as pd # 读取CSV文件,这里假设你的CSV没有表头,第一列是乐队名,后面列是标签 # 如果有表头,把header=None去掉,改成header=0或者对应表头行号 df = pd.read_csv('music_tags.csv', header=None) # 提取乐队名列,剩下的列都是标签,转成长格式(每一行对应一个乐队+一个标签) band_names = df[0] tags_long = df.drop(0, axis=1).stack().reset_index(level=1, drop=True).rename('tag') combined = pd.DataFrame({'乐队': band_names, '标签': tags_long}).reset_index(drop=True) # 生成交叉表,把标签作为列,乐队作为行,填充存在的标签,缺失的用NaN result = pd.crosstab(combined['乐队'], combined['标签'], rownames=['乐队'], colnames=['']) # 把交叉表的计数结果替换成标签本身(因为默认是计数,我们需要显示标签内容) result = result.apply(lambda col: col.index.where(col > 0, pd.NA)) # 可选:按标签出现的次数排序列,让出现多的标签排在前面 tag_popularity = combined['标签'].value_counts().index result = result[tag_popularity] # 保存处理好的文件 result.to_csv('sorted_music_tags.csv')
运行后得到的结果就是你想要的格式:每个乐队一行,相同标签在同一列,没有的位置显示NaN。
二、Excel 方法(适合手动处理小文件)
如果你更习惯用Excel,也可以用公式实现,步骤如下:
提取所有唯一标签:
- 把原数据中所有标签(除了乐队名)复制到一个新的空白列,比如列D
- 选中列D,点击「数据」→「删除重复值」,得到所有不重复的标签,把这些标签作为结果表的表头(比如从B1开始依次排列)
构建结果表:
- 结果表的A列复制原数据的所有乐队名
- 在B2单元格输入公式:
=IF(ISNUMBER(SEARCH(B$1,$A2)),B$1,NA()) - 下拉填充所有行,再右拉填充所有标签列
公式解释:SEARCH(B$1,$A2)会查找当前标签(B$1)是否在乐队的标签字符串($A2)里,找到就返回标签内容,没找到就返回#N/A(对应你要的NaN)。
- 调整列顺序:
如果想让标签按出现频率排序,可以先统计每个标签出现的次数,再手动调整列的位置即可。
备注:内容来源于stack exchange,提问作者Eoghan
相关产品推荐
相关产品推荐

