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

如何从DataFrame列生成歌曲创作者的全排列组合新DataFrame?

解决方案

要实现这个需求,我们可以借助pandas处理数据,结合itertools.combinations生成创作者的两两配对(从你的示例来看,你需要的是无重复的单向配对,而非严格意义上的全排列——因为示例里没有反向的组合,比如Tupac Shakur, Prince这种)。以下是具体步骤:

步骤1:导入依赖库

首先导入所需工具:

import pandas as pd
from itertools import combinations

步骤2:处理原始DataFrame

假设你的原始DataFrame名为df,其中Song列是歌曲名,Writer列是用逗号分隔的创作者字符串(如你提供的示例图所示)。先把每个歌曲的创作者分割成列表:

# 将Writer列的字符串分割为创作者列表
df['writers_list'] = df['Writer'].str.split(', ', expand=False)

步骤3:生成创作者组合并构建新DataFrame

遍历每一行,为每个歌曲的创作者列表生成所有2元素的组合,再整理成目标格式的DataFrame:

# 初始化空列表存储结果
result_rows = []

for _, row in df.iterrows():
    song_name = row['Song']
    writers = row['writers_list']
    # 生成所有不重复的两两创作者组合
    for writer_pair in combinations(writers, 2):
        result_rows.append({
            'Song': song_name,
            'Writer1': writer_pair[0],
            'Writer2': writer_pair[1]
        })

# 转换为最终的新DataFrame
new_df = pd.DataFrame(result_rows)

如果你不需要保留歌曲名,只需删除代码中Song相关的字段即可。

验证结果

以你给出的《03 Bonnie & Clyde》为例,运行代码后生成的对应行将和你示例的格式一致(示例里的Tupac S应该是输入笔误,实际会保留完整的Tupac Shakur):

Song          Writer1          Writer2
0  03 Bonnie & Clyde           Prince    Tupac Shakur
1  03 Bonnie & Clyde           Prince           Jay-Z
2  03 Bonnie & Clyde           Prince    Tyrone Wrice
3  03 Bonnie & Clyde           Prince       Kanye West
4  03 Bonnie & Clyde    Tupac Shakur           Jay-Z
5  03 Bonnie & Clyde    Tupac Shakur    Tyrone Wrice
6  03 Bonnie & Clyde    Tupac Shakur       Kanye West
7  03 Bonnie & Clyde           Jay-Z    Tyrone Wrice
8  03 Bonnie & Clyde           Jay-Z       Kanye West
9  03 Bonnie & Clyde    Tyrone Wrice       Kanye West

特殊场景补充

如果你的原始DataFrame是同一歌曲对应多行创作者(即每一行是一个歌曲的单个创作者),处理方式只需调整分组逻辑:

# 按歌曲分组,收集每个歌曲的创作者列表
grouped_df = df.groupby('Song')['Writer'].apply(list).reset_index()

# 后续生成组合的逻辑和之前一致
result_rows = []
for _, row in grouped_df.iterrows():
    writers = row['Writer']
    for writer_pair in combinations(writers, 2):
        result_rows.append({
            'Writer1': writer_pair[0],
            'Writer2': writer_pair[1]
        })

new_df = pd.DataFrame(result_rows)

这样就能完美匹配你的需求啦!

内容的提问来源于stack exchange,提问作者joe borg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:07:20