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