Med*_*din 5 python stack pandas data-science
我对这两种方法感到非常困惑: stack() 和 unstack() 我知道我应该在多索引的情况下使用它们,但是,我需要知道以下内容:
1- 我不知道应该在哪里使用 stack 或 unstack
2- 为什么我应该使用它们
当我使用“pivot”时,我理解的是pivot将Dataframe转换为unstack形式,如果这是正确的,我需要知道为什么当我使用以下行代码时它会引发错误:
data.stack(level=1) # IndexError: Too many levels: Index has only 1 level, not 2
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,它会运行:
data.unstack().stack(level=1)
Run Code Online (Sandbox Code Playgroud)
有时,我看到堆栈有像这样的 kwargs,level=-1 我不知道什么时候必须放置“-1”,这是什么意思
我知道我误解了很多东西,但我很困惑
那么,对于理解这些术语有什么帮助吗?
提前谢谢
pivot这是对和之间差异的规范回答的尝试unstack。有关重塑的完整指南,必须阅读pandas 关于重塑和数据透视表的官方文档。
pivot并unstack执行大致相同的操作,但它们在不同的逻辑级别上操作:分别是列和索引级别。
我将使用此示例数据框作为输入:
df = pd.DataFrame({'col1': list('ABCABC'),
'col2': list('aaabbb'),
'col3': list('uvwxyz'),
})
Run Code Online (Sandbox Code Playgroud)
col1 col2 col3
0 A a u
1 B a v
2 C a w
3 A b x
4 B b y
5 C b z
Run Code Online (Sandbox Code Playgroud)
pivot在列上使用pandas.DataFrame.pivot对列进行操作
注意。当index参数未使用时,它将使用当前索引。
df.pivot(index='col1', columns='col2', values='col3')
Run Code Online (Sandbox Code Playgroud)
col2 a b
col1
A u x
B v y
C w z
Run Code Online (Sandbox Code Playgroud)
unstack在多重索引上使用无论输入是 Series 还是 DataFrame,这里都有两种用例。
pandas.Series.unstack我们将首先从初始 DataFrame 生成一个具有 MultIndex 的 Series:
series = df.set_index(['col1', 'col2'])['col3']
Run Code Online (Sandbox Code Playgroud)
col1 col2
A a u
B a v
C a w
A b x
B b y
C b z
Name: col3, dtype: object
Run Code Online (Sandbox Code Playgroud)
我们看到数据与原始DataFrame非常相似,但col1现在col2是索引级别,并且数据本身现在是一维的(即,一个Series)
现在,我们可以unstack默认将最右边(最后一个)索引级别应用到透视表作为列来生成 DataFrame。有多种方法可以指定要取消堆叠的索引级别,因此所有这些选项都是等效的:
series.unstack()
Run Code Online (Sandbox Code Playgroud)
series.unstack('col2') # by level name
Run Code Online (Sandbox Code Playgroud)
series.unstack(1) # by level position from the left
Run Code Online (Sandbox Code Playgroud)
series.unstack(-1) # by level position from the end (-1 = last)
Run Code Online (Sandbox Code Playgroud)
col2 a b
col1
A u x
B v y
C w z
Run Code Online (Sandbox Code Playgroud)
这意味着df.pivot(index='col1', columns='col2', values='col3')和df.set_index(['col1', 'col2'])['col3'].unstack()在逻辑上是等价的。
pandas.DataFrame.unstackDataFrame 版本unstack与 Series 版本非常相似,不同之处在于,由于数据已经是二维的,因此它将为列创建额外的索引级别。
df.set_index(['col1', 'col2']).unstack(level='col2')
Run Code Online (Sandbox Code Playgroud)
col3
col2 a b
col1
A u x
B v y
C w z
Run Code Online (Sandbox Code Playgroud)
同样,pivot通过将列表封装的列名称传递给 ,可以使用 获得相同的输出values:
df.pivot(index='col1', columns='col2', values=['col3'])
Run Code Online (Sandbox Code Playgroud)
col3
col2 a b
col1
A u x
B v y
C w z
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1928 次 |
| 最近记录: |