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

问题描述 投票:1回答:1

我有一个带有管道分隔列的pandas数据帧,该列具有任意数量的元素,称为Parts。这些管道字符串中的元素数量从0到10不等。所有管道字符串中包含的唯一元素的数量并不比行数小很多(这使得我无法手动指定所有管道字符串的数量)创建新列)。

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

... ... 'Parts'

... '12|34|56'

应该转变为

... ... 'Part_12' 'Part_34' 'Part_56'

... ... 1 1 1

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

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

我知道如何解决它的方法是将原始CSV管道传输到另一个python脚本并以char-by-char为基础处理它,但我需要在现有脚本中工作,因为我将处理数百个CSV这种方式。

这是对数据的更好说明

ID YEAR AMT PARTZ

1202 2007 99.34

9321 1988 1012.99 2031|8942

2342 2012 381.22 1939|8321|Amx3

python pandas
1个回答
2
投票

你可以使用get_dummiesadd_prefix

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

输出:

   Part_12  Part_34  Part_56
0        1        1        1

Edit for comment and counting duplicates.

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
© www.soinside.com 2019 - 2024. All rights reserved.