【发布时间】:2022-01-05 17:05:35
【问题描述】:
我有一个类似于下面的 df,但有 100 列,其中每列引用不同的文本分辨率。
| Index | A/RES/73/262 | A/RES/73/263 |
|---|---|---|
| Issue-Primary | ME | HR |
| Issue-Secondary | NaN | NaN |
| Description | Protection of the Palestinian civilian | Situation of human rights in Myanmar |
我有一个循环遍历每个解决方案描述的脚本,并在“问题主要”中为定义的搜索词词典设置一个值。
df = pd.read_excel("file_name")
issue_dict = {'human rights':'HR', 'Protection':'HR', 'Palestinian':'ME'}
key_pattern = re.compile(rf'({"|".join(issue_dict.keys())})')
for columnName, columnData in df.iteritems():
matched_key = re.search(key_pattern, str(columnData[1]))
if matched_key:
columnData[0] = issue_dict.get(matched_key.group(), "Issue-Primary")
else:
columnData[0] = np.NaN
有些解决方案的描述与多个问题相关,因此我想将类似的脚本应用于我的“问题-次要”行。但是,我需要确保当脚本为“Issue-Secondary”设置值时,它会忽略与“Issue-Primary”中的代码相关的术语
例如,“Protection”与“HR”相关,因此在脚本设置“Issue-Primary”中“ME”的值后的第一列,它应该返回“Issue-Secondary”并应用相同的值过程而不寻找“ME”术语(否则它只是复制“ME”)。理想情况下,“Issue-Primary”将设置为“ME”,“Issue-Secondary”在第一个解决方案列中获得“HR”。
以下是我的第一次尝试。但是,正如您可以想象的那样,由于我使用的是相同的 issue_dict,它不会产生预期的结果。我不确定在将脚本应用于“Issue-Secondary”时,确保“Issue-Primary”中的任何术语都被排除在外的最佳方法是什么。
issue_codes_list = ['HR', 'ME']
key_pattern = re.compile(rf'({"|".join(issue_dict.keys())})')
for columnName, columnData in df.iteritems():
matched_key = re.search(key_pattern, str(columnData[1]))
if matched_key:
columnData[0] = issue_dict.get(matched_key.group(), "Issue-Primary")
else:
columnData[0] = np.NaN
for j in issue_codes_list:
if columnData[0] == j:
if matched_key:
columnData[1] = issue_dict.get(matched_key.group(), "Issue-Secondary")
else:
columnData[1] = np.NaN
【问题讨论】: