python - Python 中是否有 VLOOKUP 函数允许您根据原始表中的值从列中返回值?

标签 python pandas dataframe vlookup

我已经开始学习 Python,因为我有兴趣将它用于我目前在 excel 中进行的大量数据分析。

我从事物流工作,目前我在 Excel 中执行的一项非常常见的事件是查找运输费率并将成本应用于交付数据。

下面是一个非常简单的交付 DataFrame:

Deliveries DataFrame

下面是一个简单的关税 DataFrame:

Tariff DataFrame

在 excel 中,我会添加一个 volume band 列,然后在关税表中查找邮政编码并返回基于 volume band 列的列号。

我已经设法使用下面的代码实现了相同的结果,但我觉得好像可能有更好的方法来实现这些结果。如果有人有更好的方法来执行此操作,我将非常感谢您提供一些建议。

My Code

最佳答案

感谢大家的回复。特别是使用查找功能的建议。在Python Pandas: Hlookup Function?的帮助下我设法使查找功能正常工作。

我必须对我的数据进行如下修改:

  1. 我将关税表的列标签更改为整数,以便它们的列标签与应用于“bands”列的值相匹配。
  2. 加载 bands csv 时,我将“Band”列设置为字符串而不是整数。

这让我可以执行查找功能。之前由于数据类型不匹配导致 Python 无法匹配而失败。

我现在已经使用这一行简单的代码执行了查找,它的运行速度似乎比 iterrows 和 itertuples 函数快 3 到 4 倍:

data_banded['Cost'] = tariff_V2.set_index('Zip').lookup(data_banded.Zip, data_banded.Band)

下面是实现此功能的代码的完整详细信息:

# Create sample DataFrames (data = delivery information, bands = lookup volume band, tariff = lookup cost by band):
data = pd.DataFrame(columns = ['Customer', 'Zip', 'Volume'], 
                    data = [['A', 'RG', 0.7], ['B', 'KT', 1.3], ['C', 'NN', 1.8], ['D', 'PO', 2.4]])
bands = pd.DataFrame(columns = ['Volume', 'Band'], 
                    data = [[0.5, '1'], [1, '2'], [1.5, '3'], [2, '4'], [2.5, '5']])
tariff = pd.DataFrame(columns = ['Zip', '1', '2', '3', '4', '5'], 
                    data = [['RG', 10, 20, 30, 40, 50], ['KT', 12, 24, 36, 48, 60],
                            ['NN', 14, 28, 42, 56, 70], ['PO', 16, 32, 48, 64, 80]])

# Create DataFrame that has delivery data and the respective volume band each line falls into:
data_banded = pd.merge_asof(data, bands, on = 'Volume', direction = 'forward')

# Lookup the cost from the tariff table and apply to a new column called 'Cost' in the delivery data:
data_banded['Cost'] = tariff.set_index('Zip').lookup(data_banded['Zip'], data_banded['Band'])

再次感谢大家的帮助和支持。

问候 迈克

关于python - Python 中是否有 VLOOKUP 函数允许您根据原始表中的值从列中返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58774232/

相关文章:

python - 使用 Pandas 与每组最近的条件行的差异

python - 来自 Hive 查询的持久 PySpark Dataframe

python - 屏幕仅在我检查用户输入 pygame 时更新

python - 如何从 DataFrame 中删除多列中具有重复字符串的行?

python - 从复杂的标准 pandas 中选择非零最小值

scala - 无法在简单示例上从 spark ML 运行 RandomForestClassifier

python - Accuracy_score 出现错误

python - 在 Python 中,这是一个好习惯吗?

python - Pandas 在加载 CSV 时保留 'null' 和 ' '

python - 使用 Pandas 在特定位置创建列