pandas中dataframe如何拆分得到两两关系

有2列dataframe,每一列中每行数据之间是空格隔开,比如
表头: 第1列 | 第2列
第1行| A B | A C
第2行| A | C
第3行| A D F | E G
等等
我想要将第1列中每行的值,与第2列中同一行的值两两对应,得到
第1行 A到A
第1行 A到C
第1行 B到A
第1行 B到C
第2行 A到C
第3行 A到E
第3行 A到G
第3行 D到E
第3行 D到G
第3行 F到E
第3行 F到G
这个如何在python中pandas可以实现吗,谢谢解答

可以通过 Pandas 中的 explode 和 merge 方法来实现。

首先,将两列数据合并成一个 DataFrame,然后使用 explode 方法将每一行中的值拆分成多行,并根据原始 DataFrame 中的索引进行标记。

接着,将拆分后的 DataFrame 使用 merge 方法自身关联,得到两两对应的结果。

下面是完整代码实现:

import pandas as pd

# 创建示例数据
df = pd.DataFrame({'col1': ['A B', 'A', 'A D F'], 'col2': ['A C', 'C', 'E G']})

# 将每个单元格中的值拆分为多行并标记原始索引
df = df.assign(col1=df.col1.str.split(' '), col2=df.col2.str.split(' '))
df = df.explode('col1').explode('col2').reset_index()

# 自身关联得到两两对应的结果
result = pd.merge(df, df, on='index')

# 提取需要的列并重命名
result = result[['col1_x', 'col2_y']].rename(columns={'col1_x': 'col1', 'col2_y': 'col2'})

# 打印结果
print(result)


img

可以使用pandas库中的 melt 函数来实现。具体做法如下:

import pandas as pd

# 创建样例数据
data = {
    '第1列': ['A B', 'A', 'A D F'],
    '第2列': ['A C', 'C', 'E G']
}
df = pd.DataFrame(data)

# 将每一列进行拆分和重复
df1 = df['第1列'].str.split(expand=True).stack().reset_index(level=1, drop=True)
df2 = df['第2列'].str.split(expand=True).stack().reset_index(level=1, drop=True)

# 合并两列,生成新的DataFrame
result = pd.concat([df1, df2], axis=1, keys=['第1列', '第2列'])

# 输出结果
print(result)

在这段代码中,首先创建了一个样例DataFrame,其中包含了两列数据。然后,使用 str.split 函数对每一列进行拆分,并使用 stack 函数将每个单元格中的值进行展开。接着,使用 reset_index 函数对展开后的Series进行重建索引,以便后面将两列进行合并。最后,使用 concat 函数将两列合并为一个新的DataFrame,并指定列名,生成最终的结果。