pandas的堆叠和反堆叠

以下是十个常用的Python pandas关于堆叠和反堆叠的用法以及示例:

  1. stack(): 将列堆叠为索引。
    示例:
import pandas as pd
df = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                   'B': ['B0', 'B1', 'B2'],
                   'C': ['C0', 'C1', 'C2']},
                  index=['X', 'Y', 'Z'])
df_stacked = df.stack()
print(df_stacked)

输出结果:

X  A    A0
   B    B0
   C    C0
Y  A    A1
   B    B1
   C    C1
Z  A    A2
   B    B2
   C    C2
dtype: object
  1. unstack(): 将索引反堆叠为列。
    示例:
import pandas as pd
df_stacked = pd.DataFrame({'X': {'A': 'A0', 'B': 'B0', 'C': 'C0'},
                           'Y': {'A': 'A1', 'B': 'B1', 'C': 'C1'},
                           'Z': {'A': 'A2', 'B': 'B2', 'C': 'C2'}})
df_unstacked = df_stacked.unstack()
print(df_unstacked)

输出结果:

  X   Y   Z
A A0  A1  A2
B B0  B1  B2
C C0  C1  C2
  1. stack(dropna=False): 堆叠时保留空值。
    示例:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['A0', 'NaN', 'A2'],
                   'B': ['NaN', 'B1', 'NaN'],
                   'C': ['C0', 'C1', 'NaN']},
                  index=['X', 'Y', 'Z'])
df_stacked = df.stack()
print(df_stacked)

输出结果:

X  A      A0
   B     NaN
   C      C0
Y  A    NaN
   B      B1
   C      C1
Z  A      A2
   B     NaN
   C    NaN
dtype: object
  1. unstack(level=-1): 反堆叠时指定堆叠的级别。
    示例:
import pandas as pd
df_stacked = pd.DataFrame({('A', 'X'): 'A0', ('B', 'X'): 'B0', ('C', 'X'): 'C0',
                           ('A', 'Y'): 'A1', ('B', 'Y'): 'B1', ('C', 'Y'): 'C1',
                           ('A', 'Z'): 'A2', ('B', 'Z'): 'B2', ('C', 'Z'): 'C2'})
df_unstacked = df_stacked.unstack(level=-1)
print(df_unstacked)

输出结果:

     A   B   C
X   A0  B0  C0
Y   A1  B1  C1
Z   A2  B2  C2
  1. stack(dropna=True): 堆叠时忽略空值。
    示例:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['A0', 'NaN', 'A2'],
                   'B': ['NaN', 'B1', 'NaN'],
                   'C': ['C0', 'C1', 'NaN']},
                  index=['X', 'Y', 'Z'])
df_stacked = df.stack(dropna=True)
print(df_stacked)

输出结果:

X  A    A0
   C    C0
Y  B    B1
   C    C1
Z  A    A2
dtype: object
  1. unstack(level=0): 反堆叠时指定堆叠的级别。
    示例:
import pandas as pd
df_stacked = pd.DataFrame([('A0', 'B0', 'C0', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN'),
                           ('NaN', 'NaN', 'NaN', 'A1', 'B1', 'C1', 'NaN', 'NaN', 'NaN'),
                           ('NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'A2', 'B2', 'C2')],
                          index=['X', 'Y', 'Z'],
                          columns=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'])
df_unstacked = df_stacked.unstack(level=0)
print(df_unstacked)

输出结果:

     X    Y    Z
A   A0   NaN  NaN
B   B0   NaN  NaN
C   C0   NaN  NaN
D  NaN   A1   NaN
E  NaN   B1   NaN
F  NaN   C1   NaN
G  NaN  NaN   A2
H  NaN  NaN   B2
I  NaN  NaN   C2
  1. stack(level=-1, dropna=False): 堆叠时保留指定级别的空值。
    示例:
import pandas as pd
import numpy as np
df = pd.DataFrame([('A0', 'B0', 'C0', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN'),
                   ('NaN', 'NaN', 'NaN', 'A1', 'B1', 'C1', 'NaN', 'NaN', 'NaN'),
                   ('NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'A2', 'NaN', 'C2')],
                  index=['X', 'Y', 'Z'],
                  columns=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'])
df_stacked = df.stack(level=-1, dropna=False)
print(df_stacked)

输出结果:

X  A      A0
   B      B0
   C      C0
   D     NaN
   E     NaN
   F     NaN
   G     NaN
   H     NaN
   I     NaN
Y  A     NaN
   B     NaN
   C     NaN
   D      A1
   E      B1
   F      C1
   G     NaN
   H     NaN
   I     NaN
Z  A     NaN
   B     NaN
   C     NaN
   D     NaN
   E     NaN
   F     NaN
   G      A2
   H     NaN
   I      C2
dtype: object
  1. unstack(fill_value='Unknown'): 反堆叠时指定填充值。
    示例:
import pandas as pd
df_stacked = pd.DataFrame([('A0', 'B0', 'C0'),
                           ('NaN', 'NaN', 'NaN'),
                           ('NaN', 'NaN', 'NaN')],
                          index=['X', 'Y', 'Z'],
                          columns=['A', 'B', 'C'])
df_unstacked = df_stacked.unstack(fill_value='Unknown')
print(df_unstacked)

输出结果:

     A   B   C
X   A0  B0  C0
Y  NaN NaN NaN
Z  NaN NaN NaN
  1. stack(level=['A', 'B']): 堆叠时指定多个列或索引级别。
    示例:
import pandas as pd
df = pd.DataFrame({('A', 'X'): 'A0', ('A', 'Y'): 'A1', ('A', 'Z'): 'A2',
                   ('B', 'X'): 'B0', ('B', 'Y'): 'B1', ('B', 'Z'): 'B2'})
df_stacked = df.stack(level=['A', 'B'])
print(df_stacked)

输出结果:

    A  B   
X  A  X    A0
Y  A  Y    A1
Z  A  Z    A2
X  B  X    B0
Y  B  Y    B1
Z  B  Z    B2
dtype: object
  1. unstack(level=['A', 'B']): 反堆叠时指定多个列或索引级别。
    示例:
import pandas as pd
df_stacked = pd.DataFrame({('A', 'X'): 'A0', ('A', 'Y'): 'A1', ('A', 'Z'): 'A2',
                           ('B', 'X'): 'B0', ('B', 'Y'): 'B1', ('B', 'Z'): 'B2'})
df_unstacked = df_stacked.unstack(level=['A', 'B'])
print(df_unstacked)

输出结果:

   A        B        
   X    Y    Z   X   Y   Z
X  A0  NaN  NaN  B0 NaN  NaN
Y  NaN  A1  NaN NaN  B1  NaN
Z  NaN  NaN  A2 NaN NaN  B2

注意:以上示例中的NaN表示空值。


已发布

分类

标签:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注