基于多列值映射数据框描述
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
我对描述进行优先排序的选项是:
- 首先在每个Period中搜索可行的选项,例如先Closing,然后如果没有找到Opening,如果没有找到Prior。
- 如果优先周期内有多个描述,则优先考虑最长或第一个实例。
因此,例如,如果我想要 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)
我需要生成一个映射数据框,其中包含每个唯一代码和我想要优先的描述,但需要根据一组优先选项来完成。因此,例如起始数据框可能如下所示:
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
我对描述进行优先排序的选项是:
- 首先在每个Period中搜索可行的选项,例如先Closing,然后如果没有找到Opening,如果没有找到Prior。
- 如果优先周期内有多个描述,则优先考虑最长或第一个实例。
因此,例如,如果我想要 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)