使此输入功能更快

Make This Input Function Faster

我正在练习一些考试题,但遇到了一个我无法弄清楚的时间限制问题。我认为这与我如何遍历输入有关。

这是著名的泰坦尼克号数据集,所以我不会打印 df 样本,因为我相信每个人都熟悉它。

该函数比较作为输入提供的两名乘客之间的相似性。此外,我将 Sex 列映射为整数,以便您在下面看到的乘客之间进行比较。

我也在想这可能是我为每位乘客编制索引和定位值的方式,但我还是不确定

函数如下,限时1秒,但当no_of_queries == 100时,函数耗时1.091s。

df = pd.read_csv("titanic.csv")

mappings = {'male': 0, 'female':1}
df['Sex'] = df['Sex'].map(mappings)


def function_similarity(no_of_queries):  

  for num in range(int(no_of_queries)):
     
      x = input()
      passenger_a, passenger_b = x.split()
      passenger_a, passenger_b = int(passenger_a), int(passenger_b)

      result = 0  
      if int(df[df['PassengerId'] == passenger_a]['Pclass']) == int(df[df['PassengerId'] == passenger_b]['Pclass']):  
          result += 1  
      if int(df[df['PassengerId'] ==passenger_a]['Sex']) == int(df[df['PassengerId'] ==passenger_b]['Sex']):  
          result += 3  
      if int(df[df['PassengerId'] ==passenger_a]['SibSp']) == int(df[df['PassengerId'] ==passenger_b]['SibSp']):  
          result += 1  
      if int(df[df['PassengerId'] == passenger_a]['Parch']) == int(df[df['PassengerId'] == passenger_b]['Parch']):  
          result += 1  
      result += max(0, 2 - abs(float(df[df['PassengerId'] ==passenger_a]['Age']) - float(df[df['PassengerId'] ==passenger_b]['Age'])) / 10.0)
      result += max(0, 2 - abs(float(df[df['PassengerId'] ==passenger_a]['Fare']) - float(df[df['PassengerId'] ==passenger_b]['Fare'])) / 5.0)
      print(result / 10.0)



function_similarity(input())
  

每个乘客a和b按id值计算一次乘客行。

df = pd.read_csv("titanic.csv")

mappings = {'male': 0, 'female':1}
df['Sex'] = df['Sex'].map(mappings)


def function_similarity(no_of_queries):  

  for num in range(int(no_of_queries)):
     
      x = input()
      passenger_a, passenger_b = x.split()
      passenger_a, passenger_b = df[df['PassengerId'] == int(passenger_a)], df[df['PassengerId'] == int(passenger_b)]

      result = 0  
      if int(passenger_a['Pclass']) == int(passenger_b['Pclass']):  
          result += 1  
      if int(passenger_a['Sex']) == int(passenger_b['Sex']):  
          result += 3  
      if int(passenger_a['SibSp']) == int(passenger_b['SibSp']):  
          result += 1  
      if int(passenger_a['Parch']) == int(passenger_b['Parch']):  
          result += 1  
      result += max(0, 2 - abs(float(passenger_a['Age']) - float(passenger_b['Age'])) / 10.0)
      result += max(0, 2 - abs(float(passenger_a['Fare']) - float(passenger_b['Fare'])) / 5.0)
      print(result / 10.0)



function_similarity(input())