gpt4 book ai didi

python - Pivot_table 来自列值中的列表

转载 作者:行者123 更新时间:2023-12-01 00:08:16 26 4
gpt4 key购买 nike

我有一个像这样的数据框:

    ID       Sim        Items          
1 0.345 [7,7]
2 0.604 [2,7,3,8,5]
3 0.082 [9,1,9,1]

我想通过以下方式形成pivot_table:

df.pivot_table(index ="ID" , columns = "Items", values="Sim")

为此,我必须提取 items 列中的列表元素,并为 row_list 中的每个唯一元素重复 IDSim 值。成为:

    ID       Sim        Items          
1 0.345 7

2 0.604 2
2 0.604 7
2 0.604 3
2 0.604 8
2 0.604 5

3 0.082 9
3 0.082 1

数据透视表:

         7       2       3       8      5      1      9

1 0.345 - - - - - -
2 0.604 0.604 0.604 0.604 0.604
3 - - - - - 0.082 0.082

有没有什么Pythonic方法可以做到这一点?或者有什么建议吗?

最佳答案

在透视之前使用explode(pandas 0.25+中的新功能);

df.explode('Items').pivot_table(index ="ID" , columns = "Items", values="Sim")
<小时/>
Items      1      2      3      5      7      8      9
ID
1 NaN NaN NaN NaN 0.345 NaN NaN
2 NaN 0.604 0.604 0.604 0.604 0.604 NaN
3 0.082 NaN NaN NaN NaN NaN 0.082

对于较低版本的 pandas,您可以尝试:

(df.drop('Items',1).join(pd.DataFrame(df['Items'].tolist())
.stack(dropna=False).droplevel(1).rename('Items'))
.pivot_table(index ="ID" , columns = "Items", values="Sim"))
<小时/>
Items      1      2      3      5      7      8      9
ID
1 NaN NaN NaN NaN 0.345 NaN NaN
2 NaN 0.604 0.604 0.604 0.604 0.604 NaN
3 0.082 NaN NaN NaN NaN NaN 0.082

如果确切的顺序很重要,请在爆炸后使用具有唯一项的重新索引:

(df.explode('Items').pivot_table(index ="ID" , columns = "Items", values="Sim")
.reindex(df.explode('Items')['Items'].unique(),axis=1))
<小时/>
Items      7      2      3      8      5      9      1
ID
1 0.345 NaN NaN NaN NaN NaN NaN
2 0.604 0.604 0.604 0.604 0.604 NaN NaN
3 NaN NaN NaN NaN NaN 0.082 0.082

关于python - Pivot_table 来自列值中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59802855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com