gpt4 book ai didi

python - 如何在 Python 中执行等效的 Excel INDEX MATCH

转载 作者:行者123 更新时间:2023-12-01 06:31:18 26 4
gpt4 key购买 nike

我有一个问题,关于如何执行相当于使用 Excel 中的 INDEX MATCH 函数返回值并在 Python 中应用它的操作。

作为一名在大型数据集上执行数据分析和操作的 Excel 用户,为了提高效率,我已转向 Python。我试图做的是根据存储在字典中的值返回的值填充 pandas 数据框中的列单元格。

为了尝试执行此操作,我使用了以下代码:

# imported csv DataFrames

crew_data = pd.read_csv(r'C:\file_path\crew_data.csv')

export_template = pd.read_csv(r'C:\file_path\export_template.csv')

#contract number dictionary

contract = {'Northern':'046-2019',
'Southern':'048-2015D',}

#function that attempts to perform a INDEX MATCH equivalent
def contract_num():

for x, y in enumerate(crew_data.loc[:, 'Region']):

if y in contract.keys():

num = contract[y]

else:

print('ERROR')

return(num)

#for loop which prepares then exports the load data

for i, r in enumerate(export_template):

export_template.loc[:, 'Contract'] = contract_num()

export_template.to_csv(r'C:\file_path\export_files\UPLOADER.csv')

print(export_template)

总结该代码的用途如下:

  1. contract_num 函数中包含的 for 循环首先迭代船员数据数据帧中的 Region 列
  2. 如果 DataFrame 中的值 y 与合约字典中的键匹配(注意:Region 列仅包含 2 个值,“Southern”和“Northern”),它将从合约字典中的值返回相应的值
  3. for 循环准备然后导出对contract_num() 函数的加载数据调用,以填充export_template DataFrame 中的Contract 列

请注意,此循环中填充了 116 个附加列,为了节省空间,这些列已从上面的代码中排除。

当代码执行时,它会产生预期的结果,但是,问题是,当在第二个 for 循环中调用该函数时,它仅返回单个值 048-2015D,而不是与正确的值相对应的值地区。

如前所述,这通常在 Excel 中使用 INDEX MATCH 来执行,但是这样做不如使用上述脚本高效。

作为初学者,我怀疑示例代码可能会被欺骗且不必要,并且可以使用更简洁的方法来执行。

如果有人可以提供解决方案或指导,我们将不胜感激。

最佳答案

df = pd.DataFrame({'Region': ['Northern', 'Northern', 'Northern',
'Northern', 'Southern', 'Southern',
'Northern', 'Eastern']})

contract = {'Northern':'046-2019',
'Southern':'048-2015D'}

# similar to INDEX MATCH
df['Contract'] = df.Region.map(contract)

输出:

     Region   Contract
0 Northern 046-2019
1 Northern 046-2019
2 Northern 046-2019
3 Northern 046-2019
4 Southern 048-2015D
5 Southern 048-2015D
6 Northern 046-2019
7 Eastern NaN

如果契约(Contract)不匹配,您可以添加打印:

if df.Contract.isna().any():
print("ERROR")

或者做出断言:

assert not df.Contract.isna().any(), "found empty contract field"

在这种情况下:

AssertionError: found empty contract field

关于python - 如何在 Python 中执行等效的 Excel INDEX MATCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59905106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com