[英]How to replace all elements of a list containing column?
我有一個 Pandas DataFrame ,其中有一列包含整數列表。
我想將 map 不同的值添加到這個整數列表中,並且遇到了幾個問題。
這是我目前擁有的(帶有測試數據集):
data = [["Item_1", [0, 3, 4]], ["Item_2", [22, 4, 5]], ["Item_3", [0, 4, 5]]]
df = pd.DataFrame(data, columns=["Item_ID", "Values"])
# Convert to string
df["Values"] = [str(x) for x in df["Values"]]
# Find and Replace:
def replace_vals(x):
replace_dict = {
**{
r"\b1\b": "A",
r"\b12\b": "B",
r"\b3\b": "C",
r"\b4\b": "D",
r"\b5\b": "E",
r"\b22\b": "G",
},
}
for pattern, replacer in replace_dict.items():
if re.search(pattern, x, re.IGNORECASE):
return replacer
return x
df["corrected_vals"] = df["Values"].apply(replace_vals)
問題是我希望替換列表中的所有值,而不僅僅是遇到的第一個值。
有沒有辦法進行這種搜索和替換,或者以替換列表的每個元素的方式進行映射?
目前這是我的輸入:
Item ID Values
Item_1 [0,3,4]
Item_2 [22,4,5]
Item_3 [0,4,5]
這是我的 output:
Item ID Values Corrected_vals
Item_1 [0,3,4] C
Item_2 [22,4,5] D
Item_3 [0,4,5] D
我理想的 output 是這樣的:
Item ID Values Corrected_vals
Item_1 [0,3,4] [C,D]
Item_2 [22,4,5] [D,E,G]
Item_3 [0,4,5] [D,E]
替換字典中具有模式的每個列表元素的位置。
感謝您的任何幫助!
這會將映射應用於元素列表,僅當它們在my_dict
中時才返回它們:
my_dict = {0:"C", 4:"D", 5: "E"}
df["Corrected_vals"] = df.apply(lambda x: [my_dict.get(el) for el in x.Values if el in my_dict], axis=1)
output:
Item_ID Values Corrected_vals
0 Item_1 [0, 3, 4] [C, D]
1 Item_2 [22, 4, 5] [D, E]
2 Item_3 [0, 4, 5] [C, D, E]
注意:如果Values
是一個字符串,則轉換為一個整數列表:
import ast
df["Values"] = df.Values.apply(ast.literal_eval)
使用re.sub()
而不是返回替換。
for pattern, replacer in replace_dict.items():
x = re.sub(pattern, replacer, flags=re.IGNORECASE)
return x
df1=df.explode('Values')#Explode
df1=df1[df1['Values'].astype(int)>0]#Filter out 0
df1['Values']=df1['Values'].apply(lambda x: chr(ord('a') + x)).str.upper()#Convert to alphas
pd.merge(df,df1.groupby('Item_ID')['Values'].agg(list).reset_index(), on='Item_ID')#Group into list and join
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.