我想要实现的目标可以在下表中看到:
因此,如果列lag_id
包含字符串Port
,则想法只填充列Lag
。如果是这样,我将拆分这样的字符串,保留数字并将其插入所需的列。
为了达到这个目的,我尝试了以下方法:
df['lag_id'] = df[df['Port'].str.contains('Lag')]['Port'].apply(lambda s:s.split(' ')[1])
这将部分完成工作。我确实得到字符串拆分,但列lag_id
的其余部分正在清空。
关于如何实现这一目标的想法?
谢谢!
卢卡斯
答案 0 :(得分:1)
我使用pd.Series.str.extract
和pd.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