当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas DataFrame unstack方法用法及代码示例


Pandas DataFrame.unstack(~) 方法将指定的行级别转换为列级别。这是 stack(~) 的相反。

参数

1.level | intstringlist 等 | optional

要转换为列级别的行级别的整数索引或名称。默认为 level=-1 ,表示转换最内层的行级别。

2. fill_value | intstringdict | optional

在生成的系列/数据帧中填充 NaN 的值。请注意,原始 DataFrame 中的 NaN 将不会被填充 - 只有那些因该方法而出现的才会被填充。默认情况下,NaN 保持原样。

返回值

SeriesDataFrame

例子

拆垛single-level DataFrames

考虑以下single-level DataFrame:

df = pd.DataFrame({"age":[2,3],"height":[4,5]}, index=["alice","bob"])
df



       age  height
alice   2     4
bob     3     5

df 上调用 unstack() 给出:

df.unstack()



age     alice    2
        bob      3
height  alice    4
        bob      5
dtype: int64

在此,请注意以下事项:

  • 返回类型为 Series ,有两个级别。

  • df 中的行标签和列标签已合并形成多索引。

将 DataFrames 与 multi-level 行拆垛

考虑以下带有multi-level行的DataFrame:

index = [("A","alice"), ("A","bob"),("B","cathy"),("B","david")]
multi_index = pd.MultiIndex.from_tuples(index)
df = pd.DataFrame({"age":[2,3,4,5],"height":[6,7,8,9]}, index=multi_index)
df



           age   height
A   alice   2      6
    bob     3      7
B   cathy   4      8
    david   5      9

默认情况下, level=-1 ,这意味着最里面的行级别 ( [alice,bob,cathy,david] ) 将转换为列级别:

df.unstack()



   age                      height
   alice  bob  cathy david  alice  bob  cathy  david
A  2.0    3.0  NaN   NaN    6.0    7.0  NaN    NaN
B  NaN    NaN  4.0   5.0    NaN    NaN  8.0    9.0

请注意以下事项:

  • 最里面的行级别([alice, bob, cathy, david])变成了列级别,并且定位为最里面的级别。

  • 使用 multi-levels 堆叠列通常会产生许多 NaN,因为例如,不存在有关组 B 中的 aliceage 的数据。

要指定要转换的级别,请传递 level 参数,如下所示:

df.unstack(level=0)



        age         height
        A     B     A     B
alice   2.0   NaN   6.0   NaN
bob     3.0   NaN   7.0   NaN
cathy   NaN   4.0   NaN   8.0
david   NaN   5.0   NaN   9.0

这里,level=0表示最外层行级别([A,B])被转换为列级别。

指定fill_value

默认情况下, fill_value=None ,这意味着生成的 Series/DataFrame 中的 NaN 保持原样。

要使用值填充所有 NaN,请传入 fill_value,如下所示:

df.unstack(level=0, fill_value="@")



        age      height
        A   B    A   B
alice   2   @    6   @
bob     3   @    7   @
cathy   @   4    @   8
david   @   5    @   9

请注意,原始 DataFrame 中预先存在的 NaN 将不会被填充 - 只有由该出栈过程引起的那些才会被 fill_value 填充。

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | unstack method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。