[英]for loop only using 1st key in dict
我正在嘗試計算某件商品是否已延遲。 我有一個包含20多個鍵和值的字典,我試圖遍歷我的數據集中的行,如果數據幀值高於dict值,它應該導致“True”。
似乎循環只使用了dict中的第一個值,我嘗試將其更改為無效。
這是我正在使用的當前代碼:
def delaytest(df):
for key, value in mydict.items():
if (key == df["serviceType"]) & (value < (df["delayTime"]/60)):
return True
else:
return False
df["delay"] = df.apply(delaytest, axis=1)
示例dict:
dict = {"key1": 5,
"key2": 10,
"key3": 15}
df before:
serviceType delayTime
key1 6
key2 11
key2 12
key1 4
key3 16
key3 14
df after:
serviceType delayTime delay
key1 6 True
key2 11 False
key2 12 False
key1 4 False
key3 16 False
key3 14 False
df expected:
serviceType delayTime delay
key1 6 True
key2 11 True
key2 12 True
key1 4 False
key3 16 True
key3 14 False
如果數據幀值高於dict值,則應該為“True”。
Undestandable。 但是在你的代碼中,如果你沒有點擊True
,你也會返回False
。 因此,對於第一個元素,您總是返回一些東西,因此退出該函數。 ;)
使用return False
擺脫else
,它應該工作:
def delaytest(df):
for key, value in mydict.items():
if (key == df["serviceType"]) & (value < (df["delayTime"]/60)):
return True
df["delay"] = df.apply(delaytest, axis=1)
我認為這里最好使用Series.map
進行新系列,並按列delayTime
進行比較:
df["delay"] = df['serviceType'].map(mydict) < df["delayTime"]
print (df)
serviceType delayTime delay
0 key1 6 True
1 key2 11 True
2 key2 12 True
3 key1 4 False
4 key3 16 True
5 key3 14 False
細節 :
print (df['serviceType'].map(mydict))
0 5
1 10
2 10
3 5
4 15
5 15
Name: serviceType, dtype: int64
如果map
的值不匹配,則獲取缺失值並且比較輸出為False
:
mydict = {"key1": 5,
"key2": 10,
"key4": 15}
df["delay"] = df['serviceType'].map(mydict) < df["delayTime"]
print (df)
serviceType delayTime delay
0 key1 6 True
1 key2 11 True
2 key2 12 True
3 key1 4 False
4 key3 16 False
5 key3 14 False
print (df['serviceType'].map(mydict))
0 5.0
1 10.0
2 10.0
3 5.0
4 NaN
5 NaN
Name: serviceType, dtype: float64
編輯:
對於可能的多個值映射,創建幫助器DataFrame
並與左連接merge
:
pairs = [('cat1','prov1', 'content1'),
('cat2','prov2', 'content2'),
('cat3','prov3', 'content3')]
df1 = pd.DataFrame(pairs, columns=['category','provider','contentType'])
print (df1)
df = df.merge(df1, how='left')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.