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

时间:2017-04-04 21:55:02

标签: 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)

我有确定应显示哪些列的功能。例如:

start = con_start()
stop = con_stop()
print(my_df.columns >= start) & (my_df <= stop)

我的结果是:

[False False ... False False False False  True  True
True  True False False]

我的目标是仅显示满足条件的列的数据框。 如果开始=&#39; a&#39;并停止=&#39; b&#39;,我希望:

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 

5 个答案:

答案 0 :(得分:7)

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

 df.loc[:,'a':'b']

答案 1 :(得分: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]

选项2
使用带有布尔切片的 loc 假设:

  • 列值具有可比性
start = con_start()
stop = con_stop()

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

df.loc[:, m]

答案 2 :(得分:0)

生成要显示的列的列表:

cols = [x for x in my_df.columns if start <= x <= stop]

仅在DataFrame中使用这些列:

my_df[cols]

答案 3 :(得分:0)

假设result是您的[true/false]数组而且letters[a...z]

res=[letters[i] for i,r in enumerate(result) if r]
new_df=df[res]

答案 4 :(得分:0)

如果您的条件与示例中显示的复杂程度相似,则无需使用任何其他功能,只需进行过滤即可。

sweet_and_red_fruit = fruit[(fruit[sweet == 1) & (fruit["colour"] == "red")]
print(sweet_and_red_fruit)

如果您只想打印

print(fruit[(fruit[sweet == 1) & (fruit["colour"] == "red")])