pandas 如何从具有单层列的扁平化 Dataframe 返回到多索引 Dataframe ?

nue99wik  于 2023-01-01  发布在  其他
关注(0)|答案(1)|浏览(115)

我想从一个以前的单层列扁平化 Dataframe 回到一个多索引 Dataframe 。
下面是一个例子:

import pandas as pd

# Create a sample dataframe with multi-indexed columns
df = pd.DataFrame({('A', 'a'): [1, 2, 3], ('A', 'b'): [4, 5, 6], ('B', 'a'): [7, 8, 9], ('B', 'b'): [10, 11, 12]})

print(df)

多索引 Dataframe :

A     B    
   a  b  a   b
0  1  4  7  10
1  2  5  8  11
2  3  6  9  12

比压平:

# Flatten the columns using the to_flat_index() method
df.columns = df.columns.to_flat_index()

print(df)

具有单层列的扁平 Dataframe :

(A, a)  (A, b)  (B, a)  (B, b)
0       1       4       7      10
1       2       5       8      11
2       3       6       9      12

如何从具有单层列的扁平化 Dataframe 返回到多索引 Dataframe ?

qyswt5oh

qyswt5oh1#

第一例

从上例中获取扁平化 Dataframe :

# Create a new MultiIndex from the columns tuples names
new_columns = pd.MultiIndex.from_tuples(df.columns)

# Assign the new MultiIndex to the columns
df.columns = new_columns

print(df)

结果:

A     B    
   a  b  a   b
0  1  4  7  10
1  2  5  8  11
2  3  6  9  12

因为df.columns = df.columns.to_flat_index()方法返回一个单级别的新Index对象,这是将多级列名扁平化为元组的结果。
因此,要从扁平化的 Dataframe 创建新的多索引 Dataframe ,需要提取原始多索引列名的元组,并将它们传递给pd.MultiIndex.from_tuples方法。

第二箱

您可能会遇到不同的展平 Dataframe ,如以下示例所示:

import pandas as pd

# Create a sample dataframe with multi-indexed columns
df = pd.DataFrame({('A', 'a'): [1, 2, 3], ('A', 'b'): [4, 5, 6], ('B', 'a'): [7, 8, 9], ('B', 'b'): [10, 11, 12]})

# Flatten the columns
df.columns = ['_'.join(col) for col in df.columns]

print(df)

结果是:

A_a  A_b  B_a  B_b
0    1    4    7   10
1    2    5    8   11
2    3    6    9   12

在这种情况下,您可以使用以下代码再次获取多索引 Dataframe :

# Create a new MultiIndex from a list of tuples
new_columns = pd.MultiIndex.from_tuples([tuple(col.split('_')) for col in df.columns])

# Assign the new MultiIndex to the columns
df.columns = new_columns

print(df)

这导致:

A     B    
   a  b  a   b
0  1  4  7  10
1  2  5  8  11
2  3  6  9  12

相关问题