python - 基于 Pandas 中的管道分隔列创建多个新列

标签 python pandas

我有一个 pandas 数据框,其中有一个管道分隔的列,其中包含任意数量的元素,称为“零件”。这些管道串中的元素数量从 0 到超过 10 个不等。所有管道串中包含的唯一元素的数量并不比行数小很多(这使得我无法在创建新列)。

对于每一行,我想创建一个新列,充当管道分隔列表中每个元素的指示变量。例如,如果行

...'零件'...

...'12|34|56'

应转换为

...“Part_12”“Part_34”“Part_56”...

...1 1 1...

因为它们有很多独特的部分,所以这些列显然会很稀疏 - 大部分为零,因为每行只包含一小部分独特的部分。

我还没有找到任何不需要手动指定列的方法(例如 Pandas Dataframe: split column into multiple columns, right-align inconsistent cell entries )。 我也研究过 pandas 的melt,但我认为这不是合适的工具。

我知道如何解决这个问题的方法是将原始 CSV 通过管道传输到另一个 python 脚本并逐个字符地处理它,但我需要在现有的脚本中工作,因为我将处理数百个以这种方式创建 CSV。

这是数据的更好说明

ID YEAR AMT PARTZ

1202 2007 99.34

9321 1988 1012.99 2031|8942

2342 2012 381.22 1939|8321|Amx3

最佳答案

您可以使用get_dummiesadd_prefix:

df.Parts.str.get_dummies().add_prefix('Part_')

输出:

   Part_12  Part_34  Part_56
0        1        1        1

编辑评论并计算重复项。

df = pd.DataFrame({'Parts':['12|34|56|12']}, index=[0])
pd.get_dummies(df.Parts.str.split('|',expand=True).stack()).sum(level=0).add_prefix('Part_')

输出:

   Part_12  Part_34  Part_56
0        2        1        1

关于python - 基于 Pandas 中的管道分隔列创建多个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48010030/

相关文章:

python - pandas 时间戳校正

python - 使用 PYTHON 将 3 维 DataFrame 转换为 3 维数组时出现问题

python - 数据帧列中的时间差

python - 如何获取另一台机器上运行的作业的状态?

python - 在flask_restplus RequestParser 中添加多个json 字段

mysql - pymysql查询: unable to rollback

python - 类型错误 : 'float' object is not callable error with bhaskara program

python - 抓取 Google 目的地

Pandas 中的 DataFrame.ix() - 当请求的列不存在时,是否可以选择捕获情况?

python - 使用 pandas 中的 chunksize 参数提取每个值的基本计数