【问题标题】:Split rows based on multiple columns pandas根据多列 pandas 拆分行
【发布时间】:2021-09-18 21:20:54
【问题描述】:

有没有办法根据某些列值将行拆分为多行?

我的输入数据框是

   A              B           C
0  1  1234.0,5643.0     One,Two
1  2           5432  Three,Four
2  3  1278.0,5678.0        Five

我想用 ',' 分割列 B 和 C。输出数据集应该是:

   A       B      C
0  1  1234.0    One
0  1  1234.0    Two
0  1  5643.0    One
0  1  5643.0    Two
1  2    5432  Three
1  2    5432   Four
2  3  1278.0   Five
2  3  5678.0   Five

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以使用:

    pd.concat([df[[0]], df[1].str.split(', ', expand=True)], axis=1)
    

    更多参考:Pandas split column into multiple columns by comma

    【讨论】:

    • 你没有扩展其他系列,BC
    【解决方案2】:

    使用str.split 将字符串转换为列表,然后explode 每个:

    df["B"] = df["B"].str.split(",")
    df["C"] = df["C"].str.split(",")
    for col in ["B", "C"]:
        df = df.explode(col)
    
    #    A       B      C
    # 0  1  1234.0    One
    # 0  1  1234.0    Two
    # 0  1  5643.0    One
    # 0  1  5643.0    Two
    # 1  2    5432  Three
    # 1  2    5432   Four
    # 2  3  1278.0   Five
    # 2  3  5678.0   Five
    

    在 pandas v1.3.0 中,您可以进行多列分解,但这要求所有列中的列表长度相同。

    【讨论】:

    • 我使用的是熊猫 0.23.4。我不认为它支持爆炸。
    • 那个版本是2018年8月的,explode是0.25(2019年7月)添加的。
    • @DumbCoder 我认为您的选择是将您的熊猫至少升级到 0.25.0(仍然是 2 岁!)或implement your own explode
    • 在 pandas 1.3 中,您可以展开多个列,从而无需 for 循环
    • @sammywemmy 在 sn-p 下查看我的注释。这仅在所有列都具有匹配的元素计数时才有效,在这种情况下它们不会
    猜你喜欢
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2019-05-05
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多