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

新手上路,请多包涵

我有带有列名的 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]

我的目标是只显示满足我条件的列的数据框。如果开始 = ‘a’ 和停止 = ‘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

原文由 CezarySzulc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 606
2 个回答

我想让它变得健壮并且尽可能少的假设。

选项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]

原文由 piRSquared 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用切片通过 .loc 实现此目的:

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

原文由 Scott Boston 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题