gpt4 book ai didi

python - 有包含列表的 Pandas 列,如何将唯一的列表元素转换为列?

转载 作者:太空狗 更新时间:2023-10-29 18:22:53 24 4
gpt4 key购买 nike

我编写了一个网络抓取工具来从产品表中提取信息并构建数据框。数据表有一个描述列,其中包含描述产品的逗号分隔的属性字符串。我想在数据框中为每个唯一属性创建一个列,并用该属性的子字符串填充该列中的行。下面的示例 df。

PRODUCTS     DATE        DESCRIPTION
Product A 2016-9-12 Steel, Red, High Hardness
Product B 2016-9-11 Blue, Lightweight, Steel
Product C 2016-9-12 Red

我认为第一步是将描述分成一个列表。

In: df2 = df['DESCRIPTION'].str.split(',')

Out:
DESCRIPTION
['Steel', 'Red', 'High Hardness']
['Blue', 'Lightweight', 'Steel']
['Red']

我想要的输出如下表所示。列名不是特别重要。

PRODUCTS     DATE        STEEL_COL  RED_COL    HIGH HARDNESS_COL  BLUE COL   LIGHTWEIGHT_COL
Product A 2016-9-12 Steel Red High Hardness
Product B 2016-9-11 Steel Blue Lightweight
Product C 2016-9-12 Red

我相信可以使用 Pivot 设置列,但我不确定在建立列后填充列的最 Pythonic 方式。感谢您的帮助。

更新

非常感谢您的回答。我选择@MaxU 的响应是正确的,因为它看起来稍微灵活一些,但@piRSquared 的结果非常相似,甚至可以被认为是更 Pythonic 的方法。我测试了两个版本,都做了我需要的。谢谢!

最佳答案

你可以建立一个稀疏矩阵:

In [27]: df
Out[27]:
PRODUCTS DATE DESCRIPTION
0 Product A 2016-9-12 Steel, Red, High Hardness
1 Product B 2016-9-11 Blue, Lightweight, Steel
2 Product C 2016-9-12 Red

In [28]: (df.set_index(['PRODUCTS','DATE'])
....: .DESCRIPTION.str.split(',\s*', expand=True)
....: .stack()
....: .reset_index()
....: .pivot_table(index=['PRODUCTS','DATE'], columns=0, fill_value=0, aggfunc='size')
....: )
Out[28]:
0 Blue High Hardness Lightweight Red Steel
PRODUCTS DATE
Product A 2016-9-12 0 1 0 1 1
Product B 2016-9-11 1 0 1 0 1
Product C 2016-9-12 0 0 0 1 0

In [29]: (df.set_index(['PRODUCTS','DATE'])
....: .DESCRIPTION.str.split(',\s*', expand=True)
....: .stack()
....: .reset_index()
....: .pivot_table(index=['PRODUCTS','DATE'], columns=0, fill_value='', aggfunc='size')
....: )
Out[29]:
0 Blue High Hardness Lightweight Red Steel
PRODUCTS DATE
Product A 2016-9-12 1 1 1
Product B 2016-9-11 1 1 1
Product C 2016-9-12 1

关于python - 有包含列表的 Pandas 列,如何将唯一的列表元素转换为列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39459321/

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