繁体   English   中英

根据Pandas中以竖线分隔的列创建多个新列

[英]Create Multiple New Columns Based on Pipe-Delimited Column in Pandas

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

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

... 'Parts'

... '12|34|56'

应该转化为

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

... 1 1 1 ...

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

我还没有找到不需要手动指定列的任何方法(例如, Pandas Dataframe:将列拆分为多列,右对齐不一致的单元格条目 )。 我还研究了熊猫的融化,但我认为这不是合适的工具。

我知道如何解决该问题的方法是将原始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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM