假设以下DataFrame:

     A    B    C    D    E    F
0   d1   10  d11   10  d21   10
1   d2   30  d12   30  d22   30
2   d3   40  d13   40  d23   40
3   d4  105  d14  105  d24  105
4   d5   10  d15   10  d25   10
5   d6   30  d16   30  d26   30
6   d7   40  d17   40  d27   40
7   d8   10  d18   10  d28   10
8   d9    5  d19    5  d29    5
9  d10   10  d20   10  d30   10


如何将所有描述合并到与各自值关联的单个列中?

   description  value
0           d1     10
1           d2     30
2           d3     40
3           d4    105
4           d5     10
5           d6     30
6           d7     40
7           d8     10
8           d9      5
9          d10     10
10         d11     10
11         d12     30
12         d13     40
13         d14    105
14         d15     10
15         d16     30
16         d17     40
17         d18     10
18         d19      5
19         d20     10
20         d21     10
21         d22     30
22         d23     40
23         d24    105
24         d25     10
25         d26     30
26         d27     40
27         d28     10
28         d29      5
29         d30     10


请注意,原始数据帧的某些描述可能具有空白值和描述

我试过了

pd.melt( id_vars=['A','C','E'], value_vars=['B','D','F'])


但是没有得到我想要的结果

最佳答案

您可以先通过iloc选择配对和取消配对列,通过values创建numpy数组,通过ravel进行转置和展平:

a = df.iloc[:, ::2].values.T.ravel()
b = df.iloc[:, 1::2].values.T.ravel()


或者,如果需要按列名称选择值:

a = df[['A','C','E']].values.T.ravel()
b = df[['B','D','F']].values.T.ravel()


最后使用DataFrame构造函数:

df = pd.DataFrame({'description': a, 'value':b})
print (df.head(10))
  description  value
0          d1     10
1          d2     30
2          d3     40
3          d4    105
4          d5     10
5          d6     30
6          d7     40
7          d8     10
8          d9      5
9         d10     10

关于python - 将多个索引展平为单个列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47226867/

10-12 06:35