我有以下代码:
set -o pipefail
结果如下表
141
实际数据更长。
我想创建一个脚本,检查col1中的字符串,如果找到子字符串“ SUPER”,则从字符串中获取最后三个字符,并在第二列中分配它们,直到下一个“ SUPER”。 我想实现这一目标:
141
答案 0 :(得分:1)
我们可以使用Series.str.contains
来检查单词SUPER
出现的位置,
然后用Series.where
保留最后3个字符,并用Series.ffill填充其余字符:
df1['col2'] = df1['col1'].where(df1['col1'].str.contains('SUPER')).str[-3:].ffill()
我们也可以将pd.to_numeric
与errors = 'coerce'
一起使用
将最后3个字符转换为数字,并用Series.ffill
df1['col2']=pd.to_numeric(df1['col1'].str[-3:],errors='coerce').ffill()
输出
col1 col2
0 SUPER_280 280.0
1 AASD 280.0
2 AASD 280.0
3 SUPER_350 350.0
4 AASD 350.0
5 SUPER_150 150.0
6 AASD 150.0
7 AASD 150.0
答案 1 :(得分:1)
我们可以使用str.split
+ Series.ffill
:
df1['col2'] = df1['col1'].str.split('_').str[1].ffill()
或通过使用np.where
有条件地检查col1
是否具有SUPER
:
mask = df1['col1'].str.contains('SUPER')
df1 = df1.assign(col2 = np.where(mask, df1['col1'].str[-3:], np.NaN)).ffill()
col1 col2
0 SUPER_280 280
1 AASD 280
2 AASD 280
3 SUPER_350 350
4 AASD 350
5 SUPER_150 150
6 AASD 150
7 AASD 150
答案 2 :(得分:1)
用Series.str.contains
测试值SUPER
,通过索引获取列的最后3个值,然后向前填充缺失值:
m = df1['col1'].str.contains('SUPER')
df1.loc[m, 'col2'] = df1.loc[m, 'col1'].str[-3:]
df1['col2'] = df1['col2'].ffill()
print (df1)
col1 col2
0 SUPER_280 280
1 AASD 280
2 AASD 280
3 SUPER_350 350
4 AASD 350
5 SUPER_150 150
6 AASD 150
7 AASD 150
答案 3 :(得分:1)
它根据字符_
分隔表达式,获取最后一个元素,如果是col2
,则将其分配给digit
,然后将None
分配给{{1 }} 如果不。然后,根据先前的值填充col2
。
ffill