【发布时间】:2021-05-12 20:59:42
【问题描述】:
我有一个表,其中在第 0 列有 内部 SKU,然后在该行有同义词。同义词的数量不是恒定的(从0到7,但会有增长的趋势)
我需要一个高效的函数,它可以让我从一个大表中的一列中获取 SKU,并将它们翻译到我的另一个表中的同义词 0。
这是我当前的函数,它从一个表中获取一组 SKU,在另一个表中搜索它们,并在它找到同义词的位置为我提供第一列值。
def new_array(dfarray1, array1, trans_dic):
missing_values = set([])
new_array = []
for value in array1:
pos = trans_dic.eq(str(value)).any(axis=1)
if len(pos[pos]) > 0 :
new_array.append(trans_dic['sku_0'][pos[pos].index[0]])
else:
missing_values.add(str(value))
if len(missing_values) > 0 :
print("The following values are missing in dictionary. They are in DF called:"+dfarray1)
print(missing_values)
sys.exit()
else:
return new_array
我确信这写得非常糟糕,因为我的笔记本电脑大约需要 3 分钟才能完成大约 75K 的值。谁能帮我加快速度?
之前提出的一些问题:
你的函数参数是什么类型的? (可以猜大熊猫,但无法确定)
是的。我正在研究两个熊猫数据框。
你的桌子是什么样子的?
字典表:
| SKU0 | Synonym 0 | Synonym 1 | Synonym 2 |
|---|---|---|---|
| foo | bar | bar1 | |
| foo1 | baar1 | ||
| foo2 | baaar0 | baar2 |
值表:
| SKU | Value | Value1 | value1 |
|---|---|---|---|
| foo | 3 | 1 | 7 |
| baar1 | 4 | 5 | 7 |
| baaar0 | 5 | 5 | 9 |
想要的表:
| SKU | Value | Value1 | value1 |
|---|---|---|---|
| foo | 3 | 1 | 7 |
| foo1 | 4 | 5 | 7 |
| foo2 | 5 | 5 | 9 |
调用此函数的其余代码是什么样的?
df1.sku = new_array('df1', list(df1.sku), sku_dic)
【问题讨论】:
标签: pandas performance indexing