python - 如何识别与 Pandas/Python 中的特定动态值相关的文本

标签 python python-3.x pandas

我的数据框中有以下两列:

COL1    COL2

 12    :402:agshhhjd:45:hghghgruru:12:fghg,hgh:22:hhhh
 57    :42:ags,hhhjd:57:hghg,hgruru:120:fghgh,gh:12:hhhhhh

我需要创建另一列 COL3,如下所示:

  COL1  COL2                                                    COL3

   12   :402:agshhhjd:45:hghghgruru,:12:fghg,hgh:22:hhhh       fghg,hg
   57   :42:agshhhjd:57:hghg,hgruru:120:fghghgh:12:hhhhhh      hghg,hg

需要以这样的方式创建新列 COL 3:在 COL2 中搜索 COL1 的值以查找同一行,然后打印除“:”之外的 7 个字符。我尝试使用切片,但它不起作用。有人可以帮忙吗?

最佳答案

您可以只使用属性replace,但首先您必须更改第1列的数据类型。我们需要替换COL2中的所有内容,保存COL1中数字后面的文字,即:

.*12:(\w{7}).* 所以我们只捕获这七个字母并通过反向引用调用它们,即值 =\1。我们对第二行也做同样的事情。由于替换是矢量化的,因此可以轻松完成此操作。虽然这会很慢

df['COL3'] = df.COL2.replace(regex=r'.*'+ df.COL1.astype('str') +':(\\w{7}).*',value="\\1")

df 
   COL1                                               COL2     COL3
0    12  :402:agshhhjd,:45:hghghgruru,:12:fghghgh,:22:hhhh  fghghgh
1    57  :42:agshhhjd,:57:hghghgruru,:120:fghghgh,:12:h...  hghghgr

您还可以这样做:

import re
[re.sub(".*"+str(i)+":(\\w{7}).*","\\1",j) for i,j in zip(df.COL1,df.COL2)]

编辑

通过更新,您可以执行以下操作:

  df.assign(COL3 = df.COL2.replace(regex=r'.*'+ df.COL1.astype('str')+':(.{7}).*',value="\\1"))
Out[102]: 
   COL1                                               COL2     COL3
0    12  :402:agshhhjd,:45:hghghgruru,:12:fghg,hgh,:22:...  fghg,hg
1    57  :42:ags,hhhjd,:57:hghg,hgruru,:120:fghgh,gh,:1...  hghg,hg

关于python - 如何识别与 Pandas/Python 中的特定动态值相关的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51700754/

相关文章:

python - 如何在 pandas 中按日期比较列中的值?

Python 3 - 与网页交互的方式

python - 是否可以在 Python Click 中动态生成命令

python - 'numpy.int64' 类型的参数不可迭代

python - 用列表中的值替换 pandas.DataFrame 的 NaN 值

python - pandas stack and unstack performance reduced after dataframe compression 并且比 R 的 data.table 差很多

python - 对齐返回元组而不是 Pandas DataFrame

python - 模块未找到错误: No module named 'win32serviceutil'

python - 在 "with"上下文中同时打开两个文件

python - 属性错误 : 'ExceptionInfo' object has no attribute 'traceback' when using pytest to assert exceptions