我有一个 pandas 数据框,其中有一个管道分隔的列,其中包含任意数量的元素,称为“零件”。这些管道串中的元素数量从 0 到超过 10 个不等。所有管道串中包含的唯一元素的数量并不比行数小很多(这使得我无法在创建新列)。
对于每一行,我想创建一个新列,充当管道分隔列表中每个元素的指示变量。例如,如果行
...'Parts'
...
...'12|34|56'
应该转化为
...'Part_12' 'Part_34' 'Part_56'
...
...1 1 1
...
因为它们有很多独特的部分,所以这些列显然会很稀疏 - 大部分为零,因为每行只包含一小部分独特的部分。
我还没有找到任何不需要手动指定列的方法(例如,Pandas Dataframe:将列拆分为多列,右对齐不一致的单元格条目 https://stackoverflow.com/questions/23317342/pandas-dataframe-split-column-into-multiple-columns-right-align-inconsistent-c)。
我也研究了熊猫的融化,但我认为这不是合适的工具。
我知道如何解决这个问题的方法是将原始 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_dummies
and add_prefix
:
df.Parts.str.get_dummies().add_prefix('Part_')
Output:
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_')
Output:
Part_12 Part_34 Part_56
0 2 1 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)