在Pandas中按条件选择列的范围

axr492tv  于 2023-09-29  发布在  其他
关注(0)|答案(2)|浏览(104)

我想做这样的事。选择一个或n个列范围和另一列
df_premises = df.iloc[:, 0:8 and 11]相当于df_premises = df.iloc[:, [0,1,2,3,,8,11]]
我试过了

  1. df_premises = df.iloc[:, 0:8, 11]-导致错误
  2. df_premises = df.iloc[:, 0:8 + 11]-返回0:18
oiopk7p5

oiopk7p51#

您可以用途:df.iloc[:, lambda x: x.index < 9 or x.index == 11]
更简单的解决方案是在此之前定义一个列表,并在iloc中使用该列表。
举例来说:

my_range = range(9)
my_range.append(11)
df_premises = df.iloc[:, my_range]

pandas documentation中所述,输入必须是以下之一:
1.整数,例如5.
1.整数的列表或数组,例如[4,3,0]。
1.一个带int的slice对象,例如一比七。
1.布尔数组。
1.具有一个参数(调用Series或DataFrame)的可调用函数,该函数返回用于索引的有效输出
你可以使用像df.iloc[:3]这样的简单切片或者像df.iloc[lambda x: x.index % 2 == 0]这样的函数。
所以具体到你问的问题,下面将工作:
df.iloc[:, lambda x: x.index < 9 or x.index == 11]

smtd7mpg

smtd7mpg2#

示例:当 * 行号300达到条件 * 时,代码输出**[270:300]**行数:
从条件生成窗口

MINUTES_BEFORE_FOR_WINDOW_TIME = 30
rows_valid  = df_s[df_s['valid'] ==1 ].index #condition 
rows_valid_bef = [ np.r_[ i - MINUTES_BEFORE_FOR_WINDOW_TIME: i +1 ] for i  in rows_valid ]
df_s = df_s.iloc[np.concatenate(rows_valid_bef) ]#one dimension

相关问题