Python pandas - >按列名称中的条件选择

Cez*_*ulc 2 python python-3.x pandas data-science

我有df列名:'a','b','c'......'z'.

print(my_df.columns)
Index(['a', 'b', 'c', ... 'y', 'z'],
  dtype='object', name=0)
Run Code Online (Sandbox Code Playgroud)

我有功能,确定应显示哪些列.例如:

start = con_start()
stop = con_stop()
print(my_df.columns >= start) & (my_df <= stop)
Run Code Online (Sandbox Code Playgroud)

我的结果是:

[False False ... False False False False  True  True
True  True False False]
Run Code Online (Sandbox Code Playgroud)

我的目标是仅显示满足我条件的列的数据框.如果start ='a'并且stop ='b',我希望:

0                                      a              b         
index1       index2                                                  
New York     New York           0.000000       0.000000          
California   Los Angeles   207066.666667  214466.666667     
Illinois     Chicago       138400.000000  143633.333333     
Pennsylvania Philadelphia   53000.000000   53633.333333      
Arizona      Phoenix       111833.333333  114366.666667 
Run Code Online (Sandbox Code Playgroud)

Sco*_*ton 8

您可以使用切片来实现.loc:

 df.loc[:,'a':'b']
Run Code Online (Sandbox Code Playgroud)


piR*_*red 3

我想让这个变得稳健并且假设尽可能少。

选项 1与数组切片一起
使用假设:iloc

  • my_df.columns.is_unique评估为True
  • 列已经按顺序排列

start = df.columns.get_loc(con_start())
stop = df.columns.get_loc(con_stop())

df.iloc[:, start:stop + 1]
Run Code Online (Sandbox Code Playgroud)

选项 2与布尔切片一起
使用假设:loc

  • 列值具有可比性

start = con_start()
stop = con_stop()

c = df.columns.values
m = (start <= c) & (stop >= c)

df.loc[:, m]
Run Code Online (Sandbox Code Playgroud)