我有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
答案 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")])