Pandas 中的分解列表单元格和其他格式

Explode list cells in Pandas and additional formatting

我有一个如下所示的数据框:

Statement        Standard A       Standard B      Standard C
Statement 1      A1               B-1.2.3, 1.2.4
Statement 1      A1                               C2, 3, 4 
Statement 2      A2                               C5  
Statement 3      A3               B-1.2.5
Statement 3      A3                               C6,7
{
    "Statement": ["Statement 1", "Statement 1", "Statement 2",
                  "Statement 3", "Statement 3",],
    "Standard A": ["A1", "A1", "A2", "A3", "A3"],
    "Standard B": ["B-1.2.3, 1.2.4", np.nan, np.nan, "B-1.2.5", np.nan],
    "Standard C": [np.nan, "C2, 3, 4 ", "C5  ", np.nan, "C6,7"],
}

基本上我需要做的就是将其转换为:

Statement        Standard A       Standard B      Standard C
Statement 1      A1               B-1.2.3         C2
Statement 1      A1               B-1.2.4         C3
Statement 1      A1                               C4
Statement 2      A2                               C5  
Statement 3      A3               B-1.2.5         C6
Statement 3      A3                               C7

为了帮助澄清,有 3 个标准。每个标准都有许多映射到“声明”的标准“参考”。

因此标准 B-1.2.3 和 B-1.2.4(来自标准 B) C2、C3 和 C4(来自标准 C)映射到声明 1。 A1(来自标准 A)也是如此,但标准 A 已经完全映射。

现在我有三个问题:

  1. 标准前缀(“B-”和“C”)仅应用于行中的第一个引用。每个标准参考都需要前缀。 (可选)

  2. 单独的标准参考文献(在标准中)列在同一行(带','分隔符),每个参考文献需要在其自己的行中

  3. 标准错开(即B-1.2.3和C2可以在同一行,但不是)

我已经尝试在此处应用该解决方案:,但我的列的长度不同,因此我收到了说明该事实的错误。

我也试过采用这个解决方案,同样没有成功:Pandas dataframe: how do I split one row into multiple rows by multi-value column?

我不相信这些解决方案中的任何一个都适用。我可能找错树了。

此时我很迷茫。

这是一个工作流水线:

import re
(df.assign(**{'Standard B': df['Standard B'].str.split(',\s*')})
   .explode('Standard B')
   .assign(**{'Standard B': lambda d: d['Standard B'].str.replace('^(\d)', r'B-', regex=True),
              'Standard C': lambda d: re.split('\s*,\s*', ', '.join(df['Standard C'].dropna())),
             })
   .assign(**{'Standard C': lambda d: d['Standard C'].str.replace('^(\d)', r'C', regex=True),
             })
)

输出:

     Statement Standard A Standard B Standard C
0  Statement 1         A1    B-1.2.3         C2
0  Statement 1         A1    B-1.2.4         C3
1  Statement 1         A1        NaN         C4
2  Statement 2         A2        NaN         C5
3  Statement 3         A3    B-1.2.5         C6
4  Statement 3         A3        NaN         C7