Python 如何从包含列表的列的数据帧创建透视表?
我有一个数据框,看起来Python 如何从包含列表的列的数据帧创建透视表?,python,pandas,Python,Pandas,我有一个数据框,看起来 将熊猫作为pd导入 数据=[ { “用户ID”:1, “二元投票”:0, “流派”:[ “冒险”, “喜剧” ] }, { “用户ID”:1, “二元投票”:1, “流派”:[ “冒险”, “戏剧” ] }, { “用户ID”:2, “二元投票”:0, “流派”:[ “喜剧”, “戏剧” ] }, { “用户ID”:2, “二元投票”:1, “流派”:[ “冒险”, “戏剧” ] }, ] df=pd.DataFrame(数据) 打印(df) 用户标识二进制投票类型 01
将熊猫作为pd导入
数据=[
{
“用户ID”:1,
“二元投票”:0,
“流派”:[
“冒险”,
“喜剧”
]
},
{
“用户ID”:1,
“二元投票”:1,
“流派”:[
“冒险”,
“戏剧”
]
},
{
“用户ID”:2,
“二元投票”:0,
“流派”:[
“喜剧”,
“戏剧”
]
},
{
“用户ID”:2,
“二元投票”:1,
“流派”:[
“冒险”,
“戏剧”
]
},
]
df=pd.DataFrame(数据)
打印(df)
用户标识二进制投票类型
01 0[冒险、喜剧]
1[冒险、戏剧]
20[喜剧、戏剧]
3.2.1[冒险、戏剧]
我想从二进制投票创建列
。这是预期产出
userId binary_vote_0 binary_vote_1
0 1 [Adventure, Comedy] [Adventure, Drama]
1 2 [Comedy, Drama] [Adventure, Drama]
我试过这样的方法,但我出错了
pd.pivot\u表(df,列=['binary\u vote'],值='genres')
这是一个错误
DataError:没有要聚合的数字类型
有什么想法吗?提前感谢。我们必须创建自己的
aggfunc
,在这种情况下,它很简单
它失败的原因是它试图将平均值
作为默认聚合函数。显然,这会在您的列表中失败
piv = (
df.pivot_table(index='userId', columns='binary_vote', values='genres', aggfunc=lambda x: x)
.add_prefix('binary_vote_')
.reset_index()
.rename_axis(None, axis=1)
)
print(piv)
我们必须创建自己的
aggfunc
,在这种情况下,它很简单
它失败的原因是它试图将平均值
作为默认聚合函数。显然,这会在您的列表中失败
piv = (
df.pivot_table(index='userId', columns='binary_vote', values='genres', aggfunc=lambda x: x)
.add_prefix('binary_vote_')
.reset_index()
.rename_axis(None, axis=1)
)
print(piv)
使用
设置索引()
和取消堆栈()
的另一种方法:
使用
设置索引()
和取消堆栈()
的另一种方法:
这很有效。谢谢如何删除
binary\u-vote
列?我尝试了df.drop('binary\u-vote',axis=1)
,但我得到了如下错误:KeyError:“['binary\u-vote']未在axis中找到”
。请参见使用rename\u-axis
进行编辑,binary\u-vote
不是一列,它是列索引的名称
。这很有效。谢谢如何删除binary\u-vote
列?我尝试了df.drop('binary\u-vote',axis=1)
,但我得到了如下错误:KeyError:“['binary\u-vote']未在axis中找到”
。请参见使用rename\u-axis
编辑,binary\u-vote
不是一列,它是列索引的名称。
m=(df.set_index(['userId','binary_vote']).unstack()
.add_prefix('binary_vote_').droplevel(level=0,axis=1))
m.reset_index().rename_axis(None,axis=1)
userId binary_vote_0 binary_vote_1
0 1 [Adventure, Comedy] [Adventure, Drama]
1 2 [Comedy, Drama] [Adventure, Drama]