Python:如何通过一些字符串连接将每个字符串拆分为新行

标签 python pandas split

这是我的 df,它由 3 列组成。我大致知道如何使用 stack 和 unstack 将字符串拆分成一个新行。但是,我想知道在拆分字符串时如何保留“前缀”(可能并不总是相同的长度)。

编辑:目前我正在使用没有爆炸功能的 Pandas 版本 0.23.0。

之前:

Col1   Col2              Col3
1       QQ12345-01/02/03  x
2       QQ123456-01/02    y
3       QQ12345-01/02/03  z

之后:

Col1   Col2              Col3
1      QQ12345-01        x
1      QQ12345-02        x
1      QQ12345-03        x
2      QQ123456-01       y
2      QQ123456-02       y
3      QQ12345-01        z
3      QQ12345-02        z
3      QQ12345-03        z

目前,我只能设法通过“/”进行拆分,这是我下面的代码。我很感激这方面的任何帮助。

column_list = df.loc[:,df.columns!='Col2'].columns.tolist()
df.set_index(column_list).stack().str.split('\',expand=True).stack().unstack(-2).reset_index(-1,drop=True).reset_index()

最佳答案

Edit: Currently I am working with the Pandas version 0.23.0 without the explode function.

好的,让我们尝试一些字符串 split/join 并使用 melt ,它是在 pandas 版本 0.20 中引入的,所以这个解决方案应该适合你。

result = (
            df[['Col1', 'Col3']].join(
                df['Col2'].str.split('-')
                    .apply(lambda x: ','.join(f'{x[0]}-{item}' for item in x[1].split('/')))
                    .str.split(',', expand=True))
                .melt(id_vars=['Col1', 'Col3'], value_name='value')
                .dropna()
                .rename(columns={'value': 'Col2'})
                .sort_values(by='Col3')
    )[['Col1','Col2', 'Col3']]

解释:

不是在 / 上拆分字符串,而是在 - 上拆分它,然后将第一部分连接到第二部分(由 / 拆分),通过 , 连接所有这些项目,最后在 , 上调用 split with expand as True ,它将为 n 值添加 n 列,然后调用 melt,它将所有这些 n 值放在一个列中,最后删除所有空行,并按 Col3 对值进行排序,以使其与问题中的预期输出相匹配。

输出:

   Col1         Col2 Col3
0     1   QQ12345-01    x
3     1   QQ12345-02    x
6     1   QQ12345-03    x
1     2  QQ123456-01    y
4     2  QQ123456-02    y
2     3   QQ12345-01    z
5     3   QQ12345-02    z
8     3   QQ12345-03    z

关于Python:如何通过一些字符串连接将每个字符串拆分为新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67831093/

相关文章:

python - 使用正则表达式将字符串插入文件路径字典中

python - 减去 Pandas 数据帧之间的行

python - 整理凌乱的数据集

Javascript - 拆分动态字符串获取括号内的值

c - 用 C 拆分字符串

android - 垂直屏幕分割过渡(动画)

Python 导入的细微差别

python - 使用 Gitlab CI Runner 从 "cannot import name ' 获取错误 'robot' run_cli'

javascript - Django:当 JavaScript 代码使用 python 变量时,如何将 JavaScript 代码单独存放在静态文件夹中

python-3.x - 在 panda 数据框中检测星期六并修改行中的值