Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在透视表中多次使用df列_Python_Python 3.x_Pandas_Pivot_Pivot Table - Fatal编程技术网

Python 如何在透视表中多次使用df列

Python 如何在透视表中多次使用df列,python,python-3.x,pandas,pivot,pivot-table,Python,Python 3.x,Pandas,Pivot,Pivot Table,我有一个这样的数据帧,但我需要将其转换为一个透视表,如下面的一个。总之,我需要在透视表中使用多个项列。我曾尝试使用aggfunc,但如何为项目本身定义它。谁能告诉我一个窍门吗 指数 项目 间隔 交易 0 A. x1 1. 1. A. x2 2. 2. B x1 2. 第一步是以自然的方式获取所需信息(“自然”:易于用熊猫表达,例如使用pivot\u table()或groupby())。为了使区间x项的完整乘积(对于缺少的对,使用0),您可以使用: df.pivot_table(index='i

我有一个这样的数据帧,但我需要将其转换为一个透视表,如下面的一个。总之,我需要在透视表中使用多个项列。我曾尝试使用aggfunc,但如何为项目本身定义它。谁能告诉我一个窍门吗

指数 项目 间隔 交易 0 A. x1 1. 1. A. x2 2. 2. B x1 2.
第一步是以自然的方式获取所需信息(“自然”:易于用熊猫表达,例如使用
pivot\u table()
groupby()
)。为了使
区间x项
的完整乘积(对于缺少的对,使用
0
),您可以使用:

df.pivot_table(index='interval', columns='item', values='transaction',
               aggfunc=sum, fill_value=0)

# out:
item      a  b
interval      
x1        1  2
x2        2  0
然而,诀窍是如何将其重塑为您要求的特定格式。这需要复制
的“项目”
列或级别(可以理解,熊猫并不特别喜欢)。以下是一个链式序列中的完整操作:

df2 = (df
     .pivot_table(index='interval', columns='item', values='transaction',
                  aggfunc=sum, fill_value=0)
     .stack().to_frame('count')
     .reset_index('item').set_index('item', append=True, drop=False)
     .unstack('interval').swaplevel(axis=1)
     .sort_index(axis=1, ascending=[True, False])
     .reset_index(drop=True)
    )

# df2:
interval   x1         x2      
         item count item count
0           a     1    a     2
1           b     2    b     0
您可以从结尾处进行注释以查看各个阶段。让我们在
pivot\u表之后逐行分解:

将项目移动到1级多索引,并将总和重命名为“计数”

...     .stack().to_frame('count')
               count
interval item       
x1       a         1
         b         2
x2       a         2
         b         0
复制
列(以便以后取消堆叠):

取消堆叠
间隔
,并交换新的多索引列的级别(注意:这就是为什么我们需要复制
:否则
取消堆叠()
将对常规索引(而不是多索引)进行操作,因此将转换为系列):

最后,对多索引列进行排序,并删除(现在无用的)索引:


第一步是以自然的方式获取所需信息(“自然”:易于用熊猫表达,例如使用
pivot\u table()
groupby()
)。为了使
区间x项
的完整乘积(对于缺少的对,使用
0
),您可以使用:

df.pivot_table(index='interval', columns='item', values='transaction',
               aggfunc=sum, fill_value=0)

# out:
item      a  b
interval      
x1        1  2
x2        2  0
然而,诀窍是如何将其重塑为您要求的特定格式。这需要复制
的“项目”
列或级别(可以理解,熊猫并不特别喜欢)。以下是一个链式序列中的完整操作:

df2 = (df
     .pivot_table(index='interval', columns='item', values='transaction',
                  aggfunc=sum, fill_value=0)
     .stack().to_frame('count')
     .reset_index('item').set_index('item', append=True, drop=False)
     .unstack('interval').swaplevel(axis=1)
     .sort_index(axis=1, ascending=[True, False])
     .reset_index(drop=True)
    )

# df2:
interval   x1         x2      
         item count item count
0           a     1    a     2
1           b     2    b     0
您可以从结尾处进行注释以查看各个阶段。让我们在
pivot\u表之后逐行分解:

将项目移动到1级多索引,并将总和重命名为“计数”

...     .stack().to_frame('count')
               count
interval item       
x1       a         1
         b         2
x2       a         2
         b         0
复制
列(以便以后取消堆叠):

取消堆叠
间隔
,并交换新的多索引列的级别(注意:这就是为什么我们需要复制
:否则
取消堆叠()
将对常规索引(而不是多索引)进行操作,因此将转换为系列):

最后,对多索引列进行排序,并删除(现在无用的)索引:


问题是:
列重复时,为什么需要特定形状?问题是:
列重复时,为什么需要特定形状?