基于多列值映射数据框描述

Mapping data frame descriptions based on values of multiple columns

我需要生成一个映射数据框,其中包含每个唯一代码和我想要优先的描述,但需要根据一组优先选项来完成。因此,例如起始数据框可能如下所示:

            Filename  TB  Period  Company           Code Desc.  Amount
0     3 - Foxtrot...    Prior TB  FOXTROT  FOXTROT__1000    98     100
1     3 - Foxtrot...    Prior TB  FOXTROT  FOXTROT__1000     7     200
2     3 - Foxtrot...  Opening TB  FOXTROT  FOXTROT__1000    ZX    -100
3     3 - Foxtrot...  Closing TB  FOXTROT  FOXTROT__1000    29    -200
4     3 - Foxtrot...    Prior TB  FOXTROT  FOXTROT__1001    BA     100
5     3 - Foxtrot...  Opening TB  FOXTROT  FOXTROT__1001     9     200
6     3 - Foxtrot...  Closing TB  FOXTROT  FOXTROT__1001   ARC    -100
7     3 - Foxtrot...  Closing TB  FOXTROT  FOXTROT__1001    86    -200

我对描述进行优先排序的选项是:

  1. 首先在每个Period中搜索可行的选项,例如先Closing,然后如果没有找到Opening,如果没有找到Prior。
  2. 如果优先周期内有多个描述,则优先考虑最长或第一个实例。

因此,例如,如果我想要 Closing 的优先级,然后是 Opening,然后是 Prior,使用最长的字符串,我应该得到一个如下所示的映射数据帧:

         Code New Desc.
FOXTROT__1000        29
FOXTROT__1001       ARC

就上下文而言,我有一种相当简单的方法可以在 tkinter 中完成所有这些操作,但它依赖于生成不一致代码的 GUI 及其描述的组合框,然后用于生成映射数据框。

问题是对于大容量(>1000 到 30,000 个不一致的代码),生成 GUI 变得不切实际,因此对于大容量,我需要它作为直接从初始数据,同时完全绕过 tkinter。

import numpy as np
import pandas as df
#Create a new column which shows the hierarchy given the value of Period
df['NewFilterColumn'] = np.where(  df['Period'] == 'Closing', 1,
                                   np.where(df['Period'] == 'Opening', 2,
                                       np.where(df['Period'] == 'Prior', 3, None
                                               )
                                       )
                                  )
df = df.sort_values(by = ['NewFilterColumn', 'Code','New Desc.'], ascending = True, axis = 0)