创建新列并根据其他列值填充它们

Creating new Columns and fill them based on another columns values

假设我有一个数据框 df 看起来像这样:

|ColA     |
|---------|
|B=7      |
|(no data)|
|C=5      |
|B=3,C=6  |

如何将数据提取到新列中,因此它看起来像这样:

|ColA  | B | C |
|------|---|---|
|True  | 7 |   |
|False |   |   |
|True  |   | 5 |
|True  | 3 | 6 |

为了填充我知道的列,我可以使用 regex .extract,如此 .

所示

但是如何同时设置Column name呢?到目前为止,我在 df.ColA.loc[df["ColA"].isna()].iteritems() 上使用了循环,但这似乎不是大量数据的最佳选择。

您可以使用 str.extractall 获取数据,然后将输出和 join 重塑为原始数据帧的导数:

# create the B/C columns
df2 = (df['ColA'].str.extractall('([^=]+)=([^=,]+),?')
                 .set_index(0, append=True)
                 .droplevel('match')[1]
                 .unstack(0, fill_value='')
       )

# rework ColA and join previous output
df.notnull().join(df2).fillna('')

# or if several columns:
df.assign(ColA=df['ColA'].notnull()).join(df2).fillna('')

输出:

    ColA  B  C
0   True  7   
1  False      
2   True     5
3   True  3  6