【发布时间】:2019-06-04 04:04:28
【问题描述】:
我有以下熊猫df:
df
price max maxperhour
Site Commodity Type
Mid Biomass Stock 6.0 1.500000e+15 1.500000e+15
CO2 Env 0.0 1.500000e+15 1.500000e+15
Coal Stock 7.0 1.500000e+15 1.500000e+15
Elec Demand NaN NaN NaN
Gas Stock 27.0 1.500000e+15 1.500000e+15
Hydro SupIm NaN NaN NaN
Lignite Stock 4.0 1.500000e+15 1.500000e+15
Solar SupIm NaN NaN NaN
Wind SupIm NaN NaN NaN
当Site == 'Mid' 和Type == ('Stock' or 'Demand') 时,我想过滤上述df 并创建一个Commodity 项目列表作为列表。
因此应该使用一些 pandas 过滤功能创建以下列表:
df.somefunction()
['Biomass', 'Coal', 'Gas', 'Lignite', 'Elec']
我将如何实现这一目标?
最后,如果可能的话,我希望将'Elec' 作为最后一个元素,我的意思是;创建列表时,'Elec' 可能是列表的第三个元素,例如:
['Biomass', 'Coal', 'Elec', 'Gas', 'Lignite']
但是,如果我能将'Elec' 作为最后一个元素,那将是最好的:
['Biomass', 'Coal', 'Gas', 'Lignite', 'Elec']
因为它是唯一带有Type == 'Demand'的元素
来自@jezrael
df[(df.index.get_level_values('Site') == 'Mid') & (df.index.get_level_values('Type') == 'Stock')].index.remove_unused_levels().get_level_values('Commodity').tolist()
【问题讨论】:
-
您认为需要将过滤值的数量与
Mid, Stock和Mid, Demand进行比较,并按输出的长度需要连接在一起吗?
标签: python pandas list filter levels