如果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
答案 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