Python支持拆分存储列表的行,而不是单个值

2024-05-15 00:06:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个庞大的数据帧,有多种类型的列-字符串、布尔值、整数、浮点值(这很重要,因为这意味着我不能用np.repeat来解决这个问题。这就是为什么我问我自己,因为我相信类似的解决方案在这里不适合我。不是这样,就是我不知道怎么做。嗯,我的一列是ID号,出于某种原因,有些行的ID下列出了多个数字。类似于:

i  ID            Name        Boolean1  Boolean2   etc
0  2755          Blahblah1   True      False      ...
1  2894, 4755    PainInMy2   True      True       ...
2  331           Blehblue    False     False      ...

我想把这个痛苦的行分割成这样,每个ID号都在一个单独的行上,所有其他的值都在它下面被复制。i、 e

i  ID      Name        Boolean1  Boolean2   etc
0  2755    Blahblah1   True      False      ...
1  2894    PainInMy2   True      True       ...
2  4755    PainInMy2   True      True       ...
3  331     Blehblue    False     False      ...

什么是一个优雅的方式,我可以做到这一点?请记住,这是一个有数十万行和十几列不同类型的大熊猫df;我想保留大部分(如果不是全部)的元数据。我可以用一系列的forif来屠宰它,但我觉得应该有更简单的方法,可能只有几行,这样做。可能是用split(',')或类似的东西。但我不知道怎么做。谢谢

(请不要将此标记为重复。我找不到任何对我有用的答案!)


Tags: 数据字符串nameidfalsetrueetc整数
1条回答
网友
1楼 · 发布于 2024-05-15 00:06:37

可以使用str方法拆分给定分隔符上的单元格,并将堆栈展开为多行。将其余列设置为索引,以确保数据对应于正确的值

df.set_index(['Name', 'Boolean1', 'Boolean2']).ID.str.split(',', expand=True)\
.stack().reset_index(3,drop = True).reset_index()\
.rename(columns = {0 : 'ID'})

你得到了吗

    Name       Boolean1 Boolean2  ID
0   Blahblah1   True    False     2755
1   PainInMy2   True    True      2894
2   PainInMy2   True    True      4755
3   Blehblue    False   False     331

相关问题 更多 >

    热门问题