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

Python 基于中以管道分隔的列创建多个新列,python,pandas,Python,Pandas,我有一个pandas dataframe,它有一个管道分隔的列,包含任意数量的元素,称为Parts。这些管柱中的元件数量从0到10个不等。所有管道字符串中包含的唯一元素的数量并不比行的数量小多少(这使得我无法在创建新列时手动指定所有元素) 对于每一行,我想创建一个新列,作为管道分隔列表中每个元素的指示符变量。例如,如果行 …“零件” …'12 | 34 | 56' 应该转化为 …第12部分第34部分第56部分 …11 因为它们有很多独特的部分,所以这些列显然是稀疏的——大部分是零,因为每行只包含

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

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

“零件”

'12 | 34 | 56'

应该转化为

…第12部分第34部分第56部分

11

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

我还没有找到任何不需要手动指定列的方法(例如,)。 我也看过熊猫的融化,但我认为这不是合适的工具

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

这里有一个更好的数据说明

ID年份金额PARTZ

120200799.34

93211988 1012.992031 | 8942


2342 2012 381.22 1939 | 8321 | Amx3

您可以使用
获取假人
添加前缀

df.Parts.str.get_dummies().add_prefix('Part_')
输出:

   Part_12  Part_34  Part_56
0        1        1        1
   Part_12  Part_34  Part_56
0        2        1        1
编辑注释并计算重复项。 输出:

   Part_12  Part_34  Part_56
0        1        1        1
   Part_12  Part_34  Part_56
0        2        1        1

这真的很优雅。但是,它似乎不计算重复项(例如12 | 12 | 34)@MikePalmice
pd.get_dummies(df.Parts.str.split('|',expand=True.stack()).sum(level=0)。添加_前缀('Part|')
这两个解决方案生成具有不同维度的数据帧,特别是第二个解决方案的行数为25%。指数是0,3,6,7,9等。你介意用更可靠的数据开始一个新问题吗?没问题,这是链接-。我注意到被排除的索引对于
部分有空值。因此,修改后的解决方案唯一的“问题”是,它生成的是NaN而不是0。但是,在所有以“Part\”开头的列中,用0替换NaN应该很容易。(在Excel中检查结果而不是从shell中检查结果是我的错误!)