如果在另一列中包含字符串,则在一列中返回“是”

时间:2019-08-01 14:30:20

标签: python pandas

如果Valid Site中包含盒装考试,我想创建一列Exams for this Site

由于某些原因,我目前对Valid Site的使用方法给我提供了不准确的值:

>>> Materials_Tracking_df

+--------+--------------------+-----------------------+--------------+
| EXAM   | Scoring Site DBN   | Exams for this Site   | Valid Site   |
|--------+--------------------+-----------------------+--------------|
| MXRC   | 04M435             | MXRC, MXRK, MXRN,     | N            |
| MXRC   | 04M435             | MXRC, MXRK, MXRN,     | N            |
| SXRK   | 03M076             | SXRK, SXRU,           | N            |
| MXRC   | 04M435             | MXRC, MXRK, MXRN,     | N            |
+--------+--------------------+-----------------------+--------------+

看看第一行如何说MXRC是N的{​​{1}},即使它显然在Valid Site下。

这是我正在使用的代码:

Exams for this Site

1 个答案:

答案 0 :(得分:2)

MaterialsTracking_df['Valid Site'] = "Y" if ...

所有行分配一个值。

改用pandas.DataFrame.apply https://pandas.pydata.org/pandas-docs/version/0.24.2/reference/api/pandas.DataFrame.apply.html

示例(我在条件不满足的地方添加了另一个虚拟行):

import pandas as pd
from io import StringIO

Materials_Tracking_df = pd.read_csv(StringIO("""
EXAM;Scoring Site DBN;Exams for this Site
MXRC;04M435;MXRC, MXRK, MXRN
MXRC;04M435;MXRC, MXRK, MXRN
SXRK;03M076;SXRK, SXRU
MXRC;04M435;MXRC, MXRK, MXRN
SXRK;04____;MXRC, MXRK, MXRN
"""), sep=';')

Materials_Tracking_df['Valid Site'] = Materials_Tracking_df.apply(
    lambda r: 'T' if r['EXAM'] in r['Exams for this Site'] else 'N'
, axis=1)

   EXAM Scoring Site DBN Exams for this Site Valid Site
0  MXRC           04M435    MXRC, MXRK, MXRN          T
1  MXRC           04M435    MXRC, MXRK, MXRN          T
2  SXRK           03M076          SXRK, SXRU          T
3  MXRC           04M435    MXRC, MXRK, MXRN          T
4  SXRK           04____    MXRC, MXRK, MXRN          N