Python 如何在透视表中多次使用df列
我有一个这样的数据帧,但我需要将其转换为一个透视表,如下面的一个。总之,我需要在透视表中使用多个项列。我曾尝试使用aggfunc,但如何为项目本身定义它。谁能告诉我一个窍门吗 指数 项目 间隔 交易 0 A. x1 1. 1. A. x2 2. 2. B x1 2.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
第一步是以自然的方式获取所需信息(“自然”:易于用熊猫表达,例如使用
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
复制项
列(以便以后取消堆叠):
取消堆叠间隔
,并交换新的多索引列的级别(注意:这就是为什么我们需要复制项
:否则取消堆叠()
将对常规索引(而不是多索引)进行操作,因此将转换为系列):
最后,对多索引列进行排序,并删除(现在无用的)索引:
问题是:项
列重复时,为什么需要特定形状?问题是:项
列重复时,为什么需要特定形状?