基于其他3个列表的新列表

问题描述

从具有['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。然后我们转到'race_number' 2,重复该循环。

enter image description here

我尝试过的代码包括:

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'的输出

我意识到上面的lambda中的“计数”放错了位置-但希望您能明白我的追求。 谢谢。

解决方法

我将做一些不同的事情,这将是我要做的

  • 获取所有race_number的列表
  • 对于每个race_number,提取number_of_horses_bet_on
  • 创建一个包含1或0的列表,其中number_of_horses_bet_on的个数为1,其余为零。
  • 将此列表乘以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]
    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等于或小于该种族的行数,否则您可能需要使用最小值/最大值才能获得正确的结果

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...