Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.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 如何从包含列表的列的数据帧创建透视表?_Python_Pandas - Fatal编程技术网

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]