熊猫布尔值 在哪里过滤:如何使用它来创建数据的真实子集?



在我的例子中,我有每 1002 个样本(行)的 2560 条跟踪(以列为单位)。 我想选择一个样本最大值位于两个值之间的跟踪子集。

filter1=(CCC.max()>=11850)&(CCC.max()<=12150)
DDD=CCC.where(filter1,axis=0)
EEE=DDD.dropna(axis=0, how='all')

我希望EEE只包含上述痕迹。在计算 EEE 中每条迹线的最大值时,我再次得到所有最大值。

从我获得的信息来看,我的印象是 where 过滤器只是整个数据帧上的一种掩码,而不是数据帧的真实子集。

如何通过获取布尔参数 True 所在的这些列来制作真正的子集。

----> 应lostCode的要求,一个例子澄清了我的问题:

data=([[0.5,1.0,2.0,3.0,0.7,5.0,4.0],
[7.0,8.0,9.0,0.1,6.0,7.0,4.0],
[1.0,2.0,3.0,0.4,5.0,6.0,7.0],
[9.0,0.8,7.0,0.6,8.0,7.0,2.0]])
filter1=Data.max()<=8.0
Data=pd.DataFrame(data)
RRR=Data.where(filter1)
RRR.dropna()

数据数组包含 4 行,是我每 7 个样本的跟踪。 每行的最大值为: 第 0 行 5.0 第 1 行 9.0 第 2 行 7.0 第 3 排 9.0

最大 <=8.0 的行是第 0 行和第 2 行。

我只想复制数据帧中的 2 行,然后可用于处理。

import pandas as pd
import numpy as np
data=([[0.5,1,2,3,0.7,5,4],
[7,8,9,0.1,6,7,4],
[1,2,3,0.4,5,6,7],
[9,0.8,7,0.6,8,7,2]])
Data=pd.DataFrame(data,columns='col1 col2 col3 col4 col5 col6 col7'.split())
RRR=pd.DataFrame(columns='col1 col2 col3 col4 col5 col6 col7'.split())
print(Data)
print('-'*100)
i=0
j=0
#this selects the rows that meet the condition and save it in RRR
while i<len(Data.index):
if Data.loc[Data.index.values[i]].max()>8:
RRR.loc[j]=Data.loc[Data.index.values[i]]
j+=1
i+=1
print(RRR)
print('-'*100)
print( 'max of colum 0: ',RRR.loc[0].max())
print('-'*100)
print( 'max of colum 1: ',RRR.loc[1].max())

输出:

col1  col2  col3  col4  col5  col6  col7
0   0.5   1.0     2   3.0   0.7     5     4
1   7.0   8.0     9   0.1   6.0     7     4
2   1.0   2.0     3   0.4   5.0     6     7
3   9.0   0.8     7   0.6   8.0     7     2
----------------------------------------------------------------------------------------------------
col1  col2  col3  col4  col5  col6  col7
0   7.0   8.0   9.0   0.1   6.0   7.0   4.0
1   9.0   0.8   7.0   0.6   8.0   7.0   2.0
----------------------------------------------------------------------------------------------------
max of colum 0:  9.0
----------------------------------------------------------------------------------------------------
max of colum 1:  9.0

在试图澄清我的问题时,我发现我应该插入 axis=1 才能处理行。通过这样做,我成为尊重约束的所需行集。 代码变为:

data=([[0.5,1.0,2.0,3.0,0.7,5.0,4.0],
[7.0,8.0,9.0,0.1,6.0,7.0,4.0],
[1.0,2.0,3.0,0.4,5.0,6.0,7.0],
[9.0,0.8,7.0,0.6,8.0,7.0,2.0]])
Data=pd.DataFrame(data)
filter1=Data.max(axis=1)<=8.0
RRR=Data[filter1]
RRR

最新更新