Pandas根据条件从不同的列填充string.split()列

时间:2018-03-06 21:36:54

标签: python python-3.x pandas split

我想要实现的目标可以在下表中看到:

enter image description here

因此,如果列lag_id包含字符串Port,则想法只填充列Lag。如果是这样,我将拆分这样的字符串,保留数字并将其插入所需的列。

为了达到这个目的,我尝试了以下方法:

df['lag_id'] = df[df['Port'].str.contains('Lag')]['Port'].apply(lambda s:s.split(' ')[1])

这将部分完成工作。我确实得到字符串拆分,但列lag_id的其余部分正在清空。

enter image description here

关于如何实现这一目标的想法?

谢谢!

卢卡斯

2 个答案:

答案 0 :(得分:1)

我使用pd.Series.str.extractpd.Series.fillna

的组合
df.assign(lag_id=df.Port.str.extract('Lag (\d+)', expand=False).fillna(df.lag_id))

      Port lag_id
0    3/2/1     10
1    3/2/2     10
2    3/2/3     10
3    3/2/4     10
4    Lag 1      1
5   Lag 10     10
6   Lag 10     10
7   Lag 10     10
8   Lag 10     10
9    Lag 2      2
10   Lag 3      3

答案 1 :(得分:1)

这是一种方式。

mask = df['Port'].str.startswith('Lag')
df.loc[mask, 'lag_id'] = df.loc[mask, 'Port'].apply(lambda x: int(x.split(' ')[1]))
df['lag_id'] = df['lag_id'].astype(int)

#       Port  lag_id
# 0    3/2/1      10
# 1    3/2/2      10
# 2    3/2/3      10
# 3    3/2/4      10
# 4    Lag 1       1
# 5   Lag 10      10
# 6   Lag 10      10
# 7   Lag 10      10
# 8   Lag 10      10
# 9    Lag 2       2
# 10   Lag 3       3