我在决定我将创建的数据帧中的新列应该取哪个值时遇到了问题.以下是要求:

  1. 该值的长度应为17
  2. 该值应包含"MP",格式为xxmpxxxxxxxxxxx

以下是数据:

Serial Number New Serial Number + Keyword Serial Number Old
12MP3221156732243 12MP3221156732243 Restaurant 12MP3221156732243
0 Retail 12MP3251453730827 3251453730827
0 K312MP3251773832657 3251773832657
11MP3221156732243 11MP3221156732243 MP3221156732243
11MP3251156732267 0 MP3251156732267

以下是预期输出:

Serial Number New Serial Number + Keyword Serial Number Old Serial Number Final
12MP3221156732243 12MP3221156732243 Restaurant 12MP3221156732243 12MP3221156732243
0 Retail 12MP3251453730827 3251453730827 12MP3251453730827
0 K312MP3251773832657 3251773832657 12MP3251773832657
11MP3221156732243 11MP3221156732243 MP3221156732243 11MP3221156732243
11MP3251156732267 0 MP3251156732267 11MP3251156732267

有人知道如何获得"序列号最终"值吗?

推荐答案

您可以将正则表达式用于(..MP.{13})个字符(2个字符,MP,13个字符):

df['Serial Number Final'] = df['Serial Number + Keyword'].str.extract(r'(..MP.{13})')

或者,如果x只能是数字\d\dMP\d{13}(2位,MP,13位):

df['Serial Number Final'] = df['Serial Number + Keyword'].str.extract(r'(\d\dMP\d{13})')

输出:

   Serial Number New       Serial Number + Keyword  Serial Number Old Serial Number Final
0  12MP3221156732243  12MP3221156732243 Restaurant  12MP3221156732243   12MP3221156732243
1                  0      Retail 12MP3251453730827      3251453730827   12MP3251453730827
2                  0           K312MP3251773832657      3251773832657   12MP3251773832657
3  11MP3221156732243             11MP3221156732243    MP3221156732243   11MP3221156732243

use several columns (pick first match):

cols = ['Serial Number New', 'Serial Number + Keyword']

df['Serial Number Final'] = (df[cols]
 .apply(lambda s: s.str.extract(r'(\d\dMP\d{13})', expand=False))
 .bfill().iloc[:, 0]
)

输出:

   Serial Number New       Serial Number + Keyword  Serial Number Old Serial Number Final
0  12MP3221156732243  12MP3221156732243 Restaurant  12MP3221156732243   12MP3221156732243
1                  0      Retail 12MP3251453730827      3251453730827   11MP3221156732243
2                  0           K312MP3251773832657      3251773832657   11MP3221156732243
3  11MP3221156732243             11MP3221156732243    MP3221156732243   11MP3221156732243
4  11MP3251156732267                             0    MP3251156732267   11MP3251156732267

Python相关问答推荐

使用Keras的线性回归参数估计

当多个值具有相同模式时返回空

如何比较numPy数组中的两个图像以获取它们不同的像素

如何根据参数推断对象的返回类型?

可变参数数量的重载类型(args或kwargs)

如何创建一个缓冲区周围的一行与manim?

多处理队列在与Forking http.server一起使用时随机跳过项目

不能使用Gekko方程'

用砂箱开发Web统计分析

如何从需要点击/切换的网页中提取表格?

导入错误:无法导入名称';操作';

人口全部乱序 - Python—Matplotlib—映射

freq = inject在pandas中做了什么?''它与freq = D有什么不同?''

有没有办法在不先将文件写入内存的情况下做到这一点?

如何在PythonPandas 中对同一个浮动列进行逐行划分?

如何使用加速广播主进程张量?

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

我如何处理超类和子类的情况

按最大属性值Django对对象进行排序

使用Django标签显示信息