如何在python中重新排列具有N列的panda数据帧并将N列附加在一起



我有一个数据帧df,如下所示,A index,B Index and C Index显示为标头并且它们中的每一个都具有作为CCD_ 3 的子报头

输入

A index              B Index             C Index
Date    Last Price  Date    Last Price  Date    Last Price
1/10/2021   12    1/11/2021    46       2/9/2021    67
2/10/2021   13    2/11/2021    51       3/9/2021    70
3/10/2021   14    3/11/2021    62       4/9/2021    73
4/10/2021   15    4/11/2021    47       5/9/2021    76
5/10/2021   16    5/11/2021    51       6/9/2021    79
6/10/2021   17    6/11/2021    22       7/9/2021    82
7/10/2021   18    7/11/2021    29       8/9/2021    85

我想将转换为下面的数据帧。

预期输出

Date        Index Name   Last Price
1/10/2021   A index      12
2/10/2021   A index      13
3/10/2021   A index      14
4/10/2021   A index      15
5/10/2021   A index      16
6/10/2021   A index      17
7/10/2021   A index      18
1/11/2021   B Index      46
2/11/2021   B Index      51
3/11/2021   B Index      62
4/11/2021   B Index      47
5/11/2021   B Index      51
6/11/2021   B Index      22
7/11/2021   B Index      29
2/9/2021    C Index      67
3/9/2021    C Index      70
4/9/2021    C Index      73
5/9/2021    C Index      76
6/9/2021    C Index      79
7/9/2021    C Index      82
8/9/2021    C Index      85

如何在pandas数据帧中做到这一点?

您的df的结构在您的输出中并不清楚。如果您提供了创建示例的Python代码,或者至少提供了df.columns的输出,这将非常有用。现在让我们假设它是这样创建的2级多索引:

columns = pd.MultiIndex.from_tuples([('A index','Date'), ('A index','Last Price'),('B index','Date'), ('B index','Last Price'),('C index','Date'), ('C index','Last Price')])
data = [
['1/10/2021',   12,    '1/11/2021',    46,       '2/9/2021',    67],
['2/10/2021',   13,    '2/11/2021',    51,       '3/9/2021',    70],
['3/10/2021',   14,    '3/11/2021',    62,       '4/9/2021',    73],
['4/10/2021',   15,    '4/11/2021',    47,       '5/9/2021',    76],
['5/10/2021',   16,    '5/11/2021',    51,       '6/9/2021',    79],
['6/10/2021',   17,    '6/11/2021',    22,       '7/9/2021',    82],
['7/10/2021',   18,    '7/11/2021',    29,       '8/9/2021',    85],
]
df = pd.DataFrame(columns = columns, data = data)

然后,你要做的基本上是.stack的应用程序,在之后进行一些重新安排

(df.stack(level = 0)
.reset_index(level=1)
.rename(columns = {'level_1':'Index Name'})
.sort_values(['Index Name','Date'])
)

这会产生

Index Name  Date    Last Price
0   A index 1/10/2021   12
1   A index 2/10/2021   13
2   A index 3/10/2021   14
3   A index 4/10/2021   15
4   A index 5/10/2021   16
5   A index 6/10/2021   17
6   A index 7/10/2021   18
0   B index 1/11/2021   46
1   B index 2/11/2021   51
2   B index 3/11/2021   62
3   B index 4/11/2021   47
4   B index 5/11/2021   51
5   B index 6/11/2021   22
6   B index 7/11/2021   29
0   C index 2/9/2021    67
1   C index 3/9/2021    70
2   C index 4/9/2021    73
3   C index 5/9/2021    76
4   C index 6/9/2021    79
5   C index 7/9/2021    82
6   C index 8/9/2021    85

最新更新