這段代碼應該根據它們在“cat”串列中的位置生成一個名為“cat_list”的串列,其中包含取自 df['a'] 的值。如果 df['a'] 包含不在 'cat' 串列中的值,則 0 應附加到 'cat_list'。'cat_list' 的長度應該是 6,但我不確定為什么它的長度是 18。
import pandas as pd
d = {'a': [0.1, 0.2,0.3,0.4,0.5,0.6], 'b': [0.6, 0.8,0.3,0.4,0.1,0.1],
'c': [0.7, 0.3,0.9,0.4,1.0,0.2],'d': [1,0,0,1,0,1]}
df = pd.DataFrame(data=d)
cat=[0.6,0.3,0.1]
cat_list=[]
for i in df.a:
for j in cat:
if i == j:
cat_list.append(cat.index(j))
else:
cat_list.append(0)
print(cat_list) # should print [2,0,1,0,0,0]
print(len(cat_list)) # should print 6, not 18
uj5u.com熱心網友回復:
在長度方面,您在 6 個元素的回圈內有 3 個元素的回圈。這將導致 6*3=18 個元素。
每次運行內回圈都將附加到 cat_list 而不是僅在找到專案時或在未找到專案時才追加。我相信這就是你想要做的:
import pandas as pd
d = {'a': [0.1, 0.2,0.3,0.4,0.5,0.6], 'b': [0.6, 0.8,0.3,0.4,0.1,0.1],
'c': [0.7, 0.3,0.9,0.4,1.0,0.2],'d': [1,0,0,1,0,1]}
df = pd.DataFrame(data=d)
cat=[0.6,0.3,0.1]
cat_list=[]
for i in df.a:
found_in_cat=False
for j in cat:
if i == j:
cat_list.append(cat.index(j))
if not found_in_cat:
cat_list.append(0)
print(cat_list) # should print [2,0,1,0,0,0]
print(len(cat_list)) # should print 6, not 18
但是,我會像下面這樣寫:
import pandas as pd
d = {'a': [0.1, 0.2,0.3,0.4,0.5,0.6], 'b': [0.6, 0.8,0.3,0.4,0.1,0.1],
'c': [0.7, 0.3,0.9,0.4,1.0,0.2],'d': [1,0,0,1,0,1]}
df = pd.DataFrame(data=d)
cat=[0.6,0.3,0.1]
cat_list=[]
for i in df.a:
if i in cat:
cat_list.append(cat.index(i))
else:
cat_list.append(0)
print(cat_list) # should print [2,0,1,0,0,0]
print(len(cat_list)) # should print 6, not 18
uj5u.com熱心網友回復:
對資料幀使用回圈通常是低效的。
您可以map在列“a”上使用精心制作的defaultdict,這將確保在找不到值時映射 0:
from collections import defaultdict
val = defaultdict(lambda :0, zip(cat, range(len(cat))))
df['a'].map(val).tolist()
輸出: [2, 0, 1, 0, 0, 0]
或者,您可以使用串列推導式和經典字典,在get缺少鍵時使用enable 設定默認值:
val = dict(zip(cat, range(len(cat))))
[val.get(e, 0) for e in df['a'].values]
使用的字典/defaultdict 的格式:
>>> val
{0.6: 0, 0.3: 1, 0.1: 2}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367459.html
