【发布时间】:2021-02-15 19:41:01
【问题描述】:
这是我的previous 问题的扩展。
下面是df:
In [28]: df = pd.DataFrame({'A':['a','b:all:c','all:1:3','c','d','e'], 'D':[{"value": '126', "perc": None, "unit": None}, {"value": 324, "perc": None, "unit": None}, {"value": 'N/A', "perc": None, "unit": None}, {}, {"value": '100', "perc": None, "unit":
...: None}, np.nan]})
...:
In [34]: df.columns = pd.MultiIndex.from_product([df.columns, ['E']])
In [35]: df
Out[35]:
A D
E E
0 a {'value': '126', 'perc': None, 'unit': None}
1 b:all:c {'value': 324, 'perc': None, 'unit': None}
2 all:1:3 {'value': 'N/A', 'perc': None, 'unit': None}
3 c {}
4 d {'value': '100', 'perc': None, 'unit': None}
5 e NaN
我需要根据dict中的值键对索引为(D,E)的多级列进行降序排序。
但我需要保留所有先前列中包含子字符串 all 的行。
如您所见,值键可以具有混合数据类型的值,如 int、string 或空(如 {} 或 NaN)。
N/A 和 Nan 值应始终在排序后出现(包括 asc 和 desc)。
因此,预期的输出将是:
In [38]: df1 = pd.DataFrame({'A':['a','b:all:c','all:1:3','d','c','e'], 'D':[{"value": '126', "perc": None, "unit": None}, {"value": 324, "perc": None, "unit": None}, {"value": 'N/A', "perc": None, "unit": None}, {"value": '100', "perc": None, "unit": No
...: ne},{}, np.nan]})
...:
In [40]: df1.columns = pd.MultiIndex.from_product([df1.columns, ['E']])
In [41]: df1
Out[41]:
A D
E E
0 a {'value': '126', 'perc': None, 'unit': None}
1 b:all:c {'value': 324, 'perc': None, 'unit': None}
2 all:1:3 {'value': 'N/A', 'perc': None, 'unit': None}
3 d {'value': '100', 'perc': None, 'unit': None}
4 c {}
5 e NaN
【问题讨论】:
标签: python python-3.x pandas dataframe sorting