2016-01-17 4 views
3

Это наблюдение за следующий вопрос: 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 привел к яблочным и оранжевым фруктам с наивысшими номерами второго прохода).

Теперь я пытаюсь использовать эту информацию для расчета относительной производительности этих фруктов (ов) до их первого прохода. Например, теперь, когда я знаю, что яблоко и апельсин - самые высокие плоды для полного анализа, 44140936864475524920668888, я хотел бы знать, улучшились ли они за первые проходы. (яблоко улучшилось со счетом 20,1 на втором проходе по сравнению с 12,1 на их первом шаге, а также оранжевый улучшился до 20,1 после оценки 19.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} 

ответ

0

Вы можете использовать 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} 
Смежные вопросы