在我的例子中,我有每 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