创建新列并根据其他列值填充它们
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
假设我有一个数据框 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