簡體   English   中英

基於其他 3 個列表的新列表

[英]New list based on 3 other lists

從包含['race_number', 'number_of_horses_bet_on','odds']列的 CSV 文件開始
我想添加/計算一個名為'desired_output'的額外列。

'desired_output'列由下式計算

  • 對於 'race_number' 1,'number_of_horses_bet_on'=2,因此在'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
  • 創建一個包含 1 或 0 的列表,其中我們將有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM