我有一個包含一些單詞的列的資料。我通過單詞串列提取了一些單詞,例如成分串列= ['水','牛奶','酵母','香蕉','糖','鳳梨']。這是單詞順序正確的串列,每個單詞都應按此順序排序。當我提取單詞時,我創建了一系列提取的單詞,但是該系列中的某些行包含兩個單詞或沒有單詞。例如(一個系列的實際長度是25000):
| 指數 | 配料 |
|---|---|
| 0 | 糖 |
| 1 | 酵母 |
| 2 | |
| 3 | 鳳梨奶 |
| 4 | 糖水 |
| 5 | 牛奶 |
我想要的是按照成分串列的順序對包含兩個單詞的行進行排序,例如索引 3 和 4。例如:
| 指數 | 配料 |
|---|---|
| 0 | 糖 |
| 1 | 酵母 |
| 2 | |
| 3 | 牛奶鳳梨 |
| 4 | 水糖 |
| 5 | 牛奶 |
首先我所做的是用“未知”替換空行。然后我嘗試了一些代碼:
ingredients_list=['water','milk', 'yeast', 'banana', 'sugar', 'ananas']
path = '|'.join(r"\b{}\b".format(x) for x in ingredients_list)
ing_l = df['ingredients'].str.findall(pat, flags=re.I).str.join(' ')
ing_l= ing_l.replace("","Unknown")
then to sort them accordingly to ingredients_list:
def sort_list(list1, list2):
zipped_pairs = zip(list2, list1)
z = [x for _, x in sorted(zipped_pairs)]
return z
words = sort_list(ing_l, ingredients_list)
OR
d = {v:i for i, v in enumerate(ing_l)}
r = sorted(ingredients_list, key=lambda v: d[v])
但我得到的是一個長度為 6 的串列,作為 components_list 長度。然后我嘗試:
ing_l= pd.DataFrame(ing_l)
ing_l['sort'] = [word for x in ingredients_list for word in ing_l if word == x]
但是我有一些錯誤ValueError:值的長度(0)與索引的長度(25000)不匹配你有解決這個問題的方法嗎?非常感謝
uj5u.com熱心網友回復:
您可以apply sorted在拆分字串上使用自定義字典,然后join再次:
ingredients_list=['water','milk', 'yeast', 'banana', 'sugar', 'ananas']
order = {k:v for v,k in enumerate(ingredients_list)}
df['sorted_ingredients'] = (
df['ingredients']
.str.split()
.apply(lambda x: ' '.join(sorted(x, key=order.get)) if isinstance(x, list) else x)
)
輸出:
index ingredients sorted_ingredients
0 0 sugar sugar
1 1 yeast yeast
2 2 NaN NaN
3 3 ananas milk milk ananas
4 4 sugar water water sugar
5 5 milk milk
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/405986.html
標籤:
