gpt4 book ai didi

python - 用多个分隔符拆分多列;新形成的列应该有原始值的计数

转载 作者:行者123 更新时间:2023-12-04 08:22:58 24 4
gpt4 key购买 nike

我是 python 编程的新手。我处理的数据是在单个超集(即列/属性)(使用非字母数字分隔符)中获得某些属性的子集。
代表性数据:


第 1 列
列2
第 3 列


1
x/x/z/z/z
我\我\我\j

2
y/y/z/w/w/w
k\k\i


首选输出:


第 1 列
w_col2
x_col2
y_col2
z_col2
i_col3
j_col3
k_col3


1
0
2
0
3
3
1
0

2
3
0
2
1
1
0
2


我一般做什么:

  • 查找此类列的唯一条目
  • 单独拆分所有这些列;应用列前缀(可选);存储为新数据框
  • 在轴 1 上应用 value_counts()
  • 与原始数据框连接

  • 幸运的是,数据集很小,可以处理已知的列。但是,我想知道是否有更好(紧凑)的方法来解决这个问题。

    编辑:
  • 添加了将值作为数字处理(转换)的新列(因为它们是计数)



  • 第 1 列
    列2
    第 3 列
    第 4 列
    第 5 列


    1
    x/x/z/z/z
    我\我\我\j
    0-2-4-2
    1_2_5_3

    2
    y/y/z/w/w/w
    k\k\i
    1-3-2-2
    4_1_3_4


    新的首选输出:


    第 1 列
    w_col2
    x_col2
    y_col2
    z_col2
    i_col3
    j_col3
    k_col3
    0_col4
    1_col4
    2_col4
    3_col4
    0_col5
    1_col5
    2_col5
    3_col5


    1
    0
    2
    0
    3
    3
    1
    0
    0
    2
    4
    2
    1
    2
    5
    3

    2
    3
    0
    2
    1
    1
    0
    2
    1
    3
    2
    2
    4
    1
    3
    4

    最佳答案

    这是一个使用 df.stack 的提案,然后 series.split关注 series.explodepd.crosstab

    u = df[['col2','col3']].stack().str.split(r"\\|/").explode()
    v = u.add("_"+ u.index.get_level_values(1))

    out = pd.crosstab(v,v.index.get_level_values(0)).T.rename_axis(index=None,columns=None)
    print(out)

    i_col3 j_col3 k_col3 w_col2 x_col2 y_col2 z_col2
    0 3 1 0 0 2 0 3
    1 1 0 2 3 0 2 1
    编辑:
    根据编辑过的问题,您可以对 col4 和 col5 执行类似的步骤,然后连接:
    u = df[['col2','col3']].stack().str.split(r"\\|/").explode()
    v = u.add("_"+ u.index.get_level_values(1))

    a = df[['col4','col5']].stack().str.split("-|_",expand=True).unstack()
    a.columns = a.columns.map("{0[0]}_{0[1]}".format)

    out = (pd.concat((df[['col1']],
    pd.crosstab(v,v.index.get_level_values(0))
    .T.rename_axis(index=None,columns=None),
    a),axis=1))
    print(out)
       col1  i_col3  j_col3  k_col3  w_col2  x_col2  y_col2  z_col2 0_col4 0_col5  \
    0 1 3 1 0 0 2 0 3 0 1
    1 2 1 0 2 3 0 2 1 1 4

    1_col4 1_col5 2_col4 2_col5 3_col4 3_col5
    0 2 2 4 5 2 3
    1 3 1 2 3 2 4

    关于python - 用多个分隔符拆分多列;新形成的列应该有原始值的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65408447/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com