gpt4 book ai didi

python - 使用级别值过滤 pandas df

转载 作者:太空宇宙 更新时间:2023-11-04 04:22:59 25 4
gpt4 key购买 nike

我有以下 Pandas 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

我想过滤上面提到的 df 并创建一个 Commodity 项目列表,当 Site == 'Mid'Type == (“库存”或“需求”)

因此应使用一些 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()

最佳答案

使用 MultiIndex 的解决方案:

m1 = (df.index.get_level_values('Site') == 'Mid')
m2 = (df.index.get_level_values('Type') == 'Stock')
m3 = (df.index.get_level_values('Type') == 'Demand')

idx1 = df[m1 & m2].index.remove_unused_levels().get_level_values('Commodity')
idx2 = df[m1 & m3].index.remove_unused_levels().get_level_values('Commodity')

idx = idx1.append(idx2)
print (idx)
Index(['Biomass', 'Coal', 'Gas', 'Lignite', 'Elec'], dtype='object', name='Commodity')

替代列:

df1 = df.reset_index()
m1 = (df1['Site'] == 'Mid')
m2 = (df1['Type'] == 'Stock')
m3 = (df1['Type'] == 'Demand')

idx1 = df1.loc[m1 & m2, 'Commodity']
idx2 = df1.loc[m1 & m3, 'Commodity']

idx = idx1.append(idx2).tolist()
print (idx)
['Biomass', 'Coal', 'Gas', 'Lignite', 'Elec']

关于python - 使用级别值过滤 pandas df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54109149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com