在python中将多列堆叠成一列

Tai*_*aie 0 python stack pandas edge-list

我有一个 100 行 x 7 列的 pandas 数据框,如下所示:

在此输入图像描述

列中的值source连接到其他列中的值。例如,a连接到contact_1, contact_2... contact_5。以同样的方式b连接到contact_6, contact_7 .... and contact_10

我想将这些列仅堆叠成两列(即源和目标),以帮助我使用边缘列表格式构建图表。

预期的输出数据格式为:

在此输入图像描述

我尝试过df.stack(),但没有得到想要的结果,我得到以下结果:

在此输入图像描述

有什么建议么?

Jua*_*n C 5

您正在寻找pd.wide_to_long。这应该做:

pd.wide_to_long(df, stubnames='destination_', i=['source'], j='number')
Run Code Online (Sandbox Code Playgroud)

该专栏destination_将包含您要查找的信息。

例子:

import pandas as pd
d = {'source': ['a', 'b'],
 'destination_1': ['contact_1', 'contact_6'],
 'destination_2': ['contact_2', 'contact_7']}
df = pd.DataFrame(d)
pd.wide_to_long(df, stubnames='destination_', i=['source'], j='number')
Run Code Online (Sandbox Code Playgroud)

输出:

              destination_
source number             
a      1         contact_1
b      1         contact_6
a      2         contact_2
b      2         contact_7
Run Code Online (Sandbox Code Playgroud)