![](/img/trans.png)
[英]Compare 2 lists, based on index from 2 other lists, and save index in new list with list comprehension
[英]New list based on 3 other lists
從包含['race_number', 'number_of_horses_bet_on','odds']
列的 CSV 文件開始
我想添加/計算一個名為'desired_output'
的額外列。
'desired_output'
列由下式計算
'desired_output column'
中,僅包含前 2 個'odds'
。 'race_number'
1 的剩余值為 0。然后我們將 go 轉換為'race_number'
2 並重復循環。我嘗試過的代碼包括:
import pandas as pd
df=pd.read_csv('test.csv')
desired_output=[]
count=0
for i in df.number_of_horses_bet_on:
for j in df.odds:
if count<i:
desired_output.append(j)
count+=1
else:
desired_output.append(0)
print(desired_output)
並且
df['desired_output']=df.odds.apply(lambda x: x if count<number_of_horses_bet_on else 0)
這些都沒有給出'desired_output'列的output
我意識到上面 lambda 中的“計數”放錯了位置 - 但希望你能看到我所追求的。 謝謝。
我會做的有點不同,這就是我要做的
race_number
的列表race_number
,提取number_of_horses_bet_on
number_of_horses_bet_on
個 1,並且 rest 將為零。odds
列相乘import pandas as pd
df=pd.read_csv('test.csv')
mask = []
races = df['race_number'].unique().tolist() # unique list of all races
for race in races:
# filter the dataframe by the race number
df_race = df[df['race_number'] == race]
# assuming number of horses is unique for every race, we extract it here
number_of_horses = df_race['number_of_horses_bet_on'].iloc[0]
# this mask will contain a list of 1s and 0s, for example for race 1 it'll be [1,1,0,0,0]
mask = mask + [1] * number_of_horses + [0] * (len(df_race) - number_of_horses)
df['mask'] = mask
df['desired_output'] = df['mask'] * df['odds']
del df['mask']
print(df)
這假設對於每場比賽,numbers_of_horses_bet_on 等於或小於該比賽的行數,否則您可能需要使用 min/max 來獲得正確的結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.