Python 我如何检查几乎所有的行是否都相同,如果是,那么如何验证最终不同的行是否以某个常数k变化
使用维度为(150,4)的iris数据集,我想查看第1列、第2列和第4列中的行是否相同,如果相同,则验证第3列的值是否不同于某个常数k。必须对每个可能的行组合执行此操作。Python 我如何检查几乎所有的行是否都相同,如果是,那么如何验证最终不同的行是否以某个常数k变化,python,pandas,comparison,filtering,rows,Python,Pandas,Comparison,Filtering,Rows,使用维度为(150,4)的iris数据集,我想查看第1列、第2列和第4列中的行是否相同,如果相同,则验证第3列的值是否不同于某个常数k。必须对每个可能的行组合执行此操作。 #### load data### import pandas as pd df=pd.DataFrame(iris.data,columns=iris.feature_names) df.head() 这给了我一个错误“序列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all
#### load data###
import pandas as pd
df=pd.DataFrame(iris.data,columns=iris.feature_names)
df.head()
这给了我一个错误“序列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()”,并且不考虑所有行
我在这里选择了k=4
list=range(0,148)
for row in list:
if df.iloc[row,:]==df.iloc[row+1,:]:
df.iloc[row,2]-df.iloc[row+1,2]<=4
else:
print('nothing')
list=范围(0148)
对于列表中的行:
如果df.iloc[row,:]==df.iloc[row+1,:]:
df.iloc[row,2]-df.iloc[row+1,2]错误消息基本上告诉您如何修复此问题:
if df.iloc[row,:]==df.iloc[row+1,:]:
它需要:
if (df.iloc[row,:]==df.iloc[row+1,:]).all():
首先,需要筛选要比较的列。在本例中,通过执行以下比较,列0、1和3将df.iloc[row1[0、1、3]==df.iloc[row2[0、1、3]
。这将返回一个真值或假值数组。但您需要所有列都相同。要完成此操作,需要使用.all()
方法。仅当数组中的所有值都为true时,它才会返回true。总之:
if (df.iloc[row1,identical_columns] == df.iloc[row2, identical_columns]).all():
由于您需要迭代每个可能的行组合,所以double for循环将很好地完成
for row1 in range(m-1):
for row2 in range(row1+1, m):
# Check for every row combinaton if the columns are equal
if (df.iloc[row1,identical_columns] == df.iloc[row2, identical_columns]).all():
pass
总共:
import numpy as np
import pandas as pd
df = pd.DataFrame(data=np.random.randint(0, 100, (10, 4)))
m = df.shape[0]
identical_columns = [0, 1, 3]
k = 4
# Force rows values to pass
df.iloc[2, :] = [3, 4, 5, 1]
df.iloc[3, :] = [3, 4, 4, 1]
for row1 in range(m-1):
for row2 in range(row1+1, m):
# Check for every row combinaton if the columns are equal
if (df.iloc[row1,identical_columns] == df.iloc[row2, identical_columns]).all():
if df.iloc[row1,2] - df.iloc[row2,2] <= k:
# TODO: Implement Your logic
print ('We pass!')
else:
print(f"row {row1} and row {row2} don't pass")
将numpy导入为np
作为pd进口熊猫
df=pd.DataFrame(data=np.random.randint(0100,(10,4)))
m=df.shape[0]
相同的_列=[0,1,3]
k=4
#强制行值传递
df.iloc[2,:]=[3,4,5,1]
df.iloc[3,:]=[3,4,4,1]
对于范围(m-1)中的行1:
对于范围内的行2(行1+1,m):
#检查每一行组合的列是否相等
如果(df.iloc[row1,相同的列]==df.iloc[row2,相同的列])。all():
如果df.iloc[row1,2]-df.iloc[row2,2]