【问题标题】:Index lookup for calculation索引查找计算
【发布时间】:2016-01-17 22:17:25
【问题描述】:

这是对以下问题的跟进:Pandas DataFrame Window Function

  analysis  first_pass   fruit  order  second_pass  test units highest  \
0     full        12.1   apple      2         20.1     1     g    True   
1     full         7.1   apple      1         12.0     2     g   False   
2  partial        14.3   apple      3         13.1     1     g   False   
3     full        20.1  orange      2         20.1     1     g    True   
4     full        17.1  orange      1         18.5     2     g    True   
5  partial        23.4  orange      3         22.7     1     g    True   
6     full        23.1   grape      3         14.1     1     g   False   
7     full        17.2   grape      2         17.1     2     g   False   
8  partial        19.1   grape      1         19.4     1     g   False   

     highest_fruit        
0  [apple, orange] 
1         [orange] 
2         [orange] 
3  [apple, orange]   
4         [orange]  
5         [orange] 
6  [apple, orange]   
7         [orange] 
8         [orange] 

在最初的问题中,我被引导到上表,其中通过对表格进行转换(例如完整分析)来指示给定分析和测试组合的最高水果> 在测试 1 中,苹果和橙子的第二次通过次数最高)。

我现在正尝试使用这些信息来计算这些水果相对于它们的第一次传递的性能。例如,现在我知道 苹果和橙子全面分析,测试 1 的最高水果,我想知道它们是否比第一次通过时有所改进。 (苹果在第二次通过时的得分为 20.1,而在他们的第一次通过时为 12.1;同样,橙色在第一次通过时的得分为 19.1 后提高到 20.1)。

我想要一个类似于下面的表格(1 = 改进,0 = 没有变化,-1 更糟):

  analysis  first_pass   fruit  order  second_pass  test units highest  \
0     full        12.1   apple      2         20.1     1     g    True   
1     full         7.1   apple      1         12.0     2     g   False   
2  partial        14.3   apple      3         13.1     1     g   False   
3     full        20.1  orange      2         20.1     1     g    True   
4     full        17.1  orange      1         18.5     2     g    True   
5  partial        23.4  orange      3         22.7     1     g    True   
6     full        23.1   grape      3         14.1     1     g   False   
7     full        17.2   grape      2         17.1     2     g   False   
8  partial        19.1   grape      1         19.4     1     g   False   

     highest_fruit        score_change_between_passes
0  [apple, orange]       {"apple" : 1, "orange" : 0}
1         [orange]       {"orange" : 1}
2         [orange]       {"orange" : -1}
3  [apple, orange]       {"apple" : 1, "orange" : 0}
4         [orange]       {"orange" " 1}
5         [orange]       {"orange" : -1}
6  [apple, orange]       {"apple" : 1, "orange" : 0}
7         [orange]       {"orange" : 1}
8         [orange]       {"orange" : -1}

【问题讨论】:

    标签: python numpy pandas


    【解决方案1】:

    你可以使用np.sign():

    second_pass = df.groupby(['test', 'analysis']).apply(lambda x: {fruit: int(np.sign(x.loc[x.fruit==fruit, 'second_pass'].iloc[0] - x.loc[x.fruit==fruit, 'first_pass'].iloc[0])) for fruit in x.highest_fruit.iloc[0]}).reset_index()
    df = df.merge(second_pass, on=['test', 'analysis'], how='left').rename(columns={0: 'second_pass_comp'})
    
    
      analysis  first_pass   fruit  order  second_pass  test units highest  \
    0     full        12.1   apple      2         20.1     1     g    True   
    1     full         7.1   apple      1         12.0     2     g   False   
    2  partial        14.3   apple      3         13.1     1     g   False   
    3     full        19.1  orange      2         20.1     1     g    True   
    4     full        17.1  orange      1         18.5     2     g    True   
    5  partial        23.4  orange      3         22.7     1     g    True   
    6     full        23.1   grape      3         14.1     1     g   False   
    7     full        17.2   grape      2         17.1     2     g   False   
    8  partial        19.1   grape      1         19.4     1     g   False   
    
         highest_fruit         first_pass_highest_fruit           second_pass_comp  
    0  [apple, orange]  {'orange': 19.1, 'apple': 12.1}  {'orange': 1, 'apple': 1}  
    1         [orange]                 {'orange': 17.1}              {'orange': 1}  
    2         [orange]                 {'orange': 23.4}             {'orange': -1}  
    3  [apple, orange]  {'orange': 19.1, 'apple': 12.1}  {'orange': 1, 'apple': 1}  
    4         [orange]                 {'orange': 17.1}              {'orange': 1}  
    5         [orange]                 {'orange': 23.4}             {'orange': -1}  
    6  [apple, orange]  {'orange': 19.1, 'apple': 12.1}  {'orange': 1, 'apple': 1}  
    7         [orange]                 {'orange': 17.1}              {'orange': 1}  
    8         [orange]                 {'orange': 23.4}             {'orange': -1} 
    

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2014-08-27
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多