首页 > 解决方案 > 根据另一列中的字符串在列中分配值

问题描述

我有以下代码:

df1=pd.DataFrame(columns=["col1"],data=(["SUPER_280"],["AASD"],
["AASD"],["SUPER_350"],["AASD"],["SUPER_150"],["AASD"],["AASD"]))

结果如下表

    col1
0   SUPER_280
1   AASD
2   AASD
3   SUPER_350
4   AASD
5   SUPER_150
6   AASD
7   AASD

实际数据要长得多。

我想制作一个检查 col1 中的字符串的脚本,如果它找到子字符串“SUPER”,则从字符串中取出最后三个字符,并将它们分配到第二列中,直到下一个“SUPER”。我想实现这一点:

    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
​````

Thanks in advance

标签: pythonpandas

解决方案


我们可以使用Series.str.contains来检查单词出现的位置,然后使用Series.ffillSUPER保留最后 3 个字符Series.where并填写其余字符:

df1['col2'] = df1['col1'].where(df1['col1'].str.contains('SUPER')).str[-3:].ffill()

我们还可以使用pd.to_numericwitherrors = '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

推荐阅读