Pandas如何根据Trade行的0-Flat取值删除DataFrame对应列
问题
我有如下Pandas DataFrame,想要删除所有在"Trade"行中取值为"0-Flat"的列,请问该如何实现?

实现方案
核心逻辑是先提取Trade行的所有取值,做布尔判断后筛掉不符合要求的列就行,1行代码就能搞定:
# 保留所有Trade行取值不等于"0-Flat"的列 df = df.loc[:, df.loc["Trade"] != "0-Flat"]
代码逻辑拆解
df.loc["Trade"]:取出行索引(行名)为Trade的整行数据,返回的Series索引对应原表的所有列名,值就是对应列在Trade行的具体内容!= "0-Flat":对这行的每个值做判断,生成由True/False组成的布尔序列,值为True代表对应列是需要保留的df.loc[:, 布尔序列]:是Pandas做行列筛选的标准写法,逗号前的:代表保留全部行,逗号后传入布尔序列就只会保留序列值为True的列
特殊情况适配
如果Trade不是行名,而是存在某一列(比如列名是row_tag)里的行标识,就用下面的写法:
# 先定位到Trade所在的行,再执行列筛选 trade_line = df[df["row_tag"] == "Trade"].iloc[0] df = df.loc[:, trade_line != "0-Flat"]
内容的提问来源于stack exchange,提问作者alwaysJuniorDev
相关产品推荐
相关产品推荐

