You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python或Excel中对音乐标签CSV数据进行分组排序?

如何在Python或Excel中对音乐标签CSV数据进行分组排序?

看起来你是想把不同乐队的音乐标签统一列对齐,让相同标签落在同一列,缺失的位置用NaN填充对吧?我来给你分Python(用Pandas)和Excel两种实用方法详细说下,应该能解决你的需求~

一、Python + Pandas 方法(适合大文件,自动化处理)

因为你提到是大CSV文件,用Python处理会比Excel更高效,而且能重复执行不用手动操作。步骤如下:

  1. 先读取CSV文件,把乐队名和标签分开处理
  2. 将分散在多列的标签转换成“一行乐队+一行标签”的长格式
  3. 用交叉表把标签转成列,对齐每个乐队的标签,缺失的填充NaN
  4. 可选:按标签出现频率排序列,让高频标签排在前面

直接上可运行的代码,每一步都加了注释:

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,也可以用公式实现,步骤如下:

  1. 提取所有唯一标签:

    • 把原数据中所有标签(除了乐队名)复制到一个新的空白列,比如列D
    • 选中列D,点击「数据」→「删除重复值」,得到所有不重复的标签,把这些标签作为结果表的表头(比如从B1开始依次排列)
  2. 构建结果表:

    • 结果表的A列复制原数据的所有乐队名
    • 在B2单元格输入公式:=IF(ISNUMBER(SEARCH(B$1,$A2)),B$1,NA())
    • 下拉填充所有行,再右拉填充所有标签列

公式解释:SEARCH(B$1,$A2)会查找当前标签(B$1)是否在乐队的标签字符串($A2)里,找到就返回标签内容,没找到就返回#N/A(对应你要的NaN)。

  1. 调整列顺序:
    如果想让标签按出现频率排序,可以先统计每个标签出现的次数,再手动调整列的位置即可。

备注:内容来源于stack exchange,提问作者Eoghan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:57:34