Python 迭代df以比较值
我有一个大的数据框,我需要比较第一列中的第一个条目和第二列中的第一个条目。然后从第一列的第一个条目到第三列的第一个条目,等等。基本上我想看看这两个值是否大于0,然后做些什么。有没有一种方法可以使用熊猫数据帧来实现这一点Python 迭代df以比较值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个大的数据框,我需要比较第一列中的第一个条目和第二列中的第一个条目。然后从第一列的第一个条目到第三列的第一个条目,等等。基本上我想看看这两个值是否大于0,然后做些什么。有没有一种方法可以使用熊猫数据帧来实现这一点 0 22 0 44 5 6 1 12 3 56 0 0 2 0 0 1 0 0 3 1 2 0 0 0 所以我想看看22和0是否都大于0。然后,如果22和44都大于0。如果22和5都大于0。如果22和6都大于0。如果12和3都大于0。然后,如果12和56都大于0
0 22 0 44 5 6
1 12 3 56 0 0
2 0 0 1 0 0
3 1 2 0 0 0
所以我想看看22和0是否都大于0。然后,如果22和44都大于0。如果22和5都大于0。如果22和6都大于0。如果12和3都大于0。然后,如果12和56都大于0。。。等等如果一对元素都大于0,那么我的代码将执行其他操作
我假设有一种简单的方法可以迭代我刚刚缺少的行和列。使用每轴=1-列,按条件进行匹配,并通过any
测试这两个行中是否至少有一个True
,或者如果两个行和列都是True
则使用changeany
到all
第一列是填充的NaN
s,因此(我希望)最后一列NaN
s是必需的,将它们替换为并转换为boolean
:
print (df)
a b c d e
0 22 0 44 5 6
1 12 3 56 0 0
2 0 0 1 0 0
3 1 2 0 0 0
def f(x):
print (x)
mask = x > 0
print (mask)
return mask.any()
df = df.rolling(2, axis=1).apply(f, raw=True).shift(-1, axis=1).fillna(0).astype(bool)
print (df)
a b c d e
0 True True True True False
1 True True True False False
2 False True True False False
3 True True False False False
看看这个建议,这可能对你有用
import pandas as pd
data = [[22, 0, 44, 5, 6], [12, 3, 56, 0, 0], [0, 0, 1, 0, 0], [1, 2, 0, 0, 0]]
df = pd.DataFrame(data)
# we ignore the first column since we will use it to compare
columns = df.columns[1:]
# new dataframe for convenience purposes
new_df = df.copy(deep=True)
# iterate through each column and compare the 1st and the iterating column and if both above zero make True or False
for i in columns:
new_df.iloc[:, i] = (df.iloc[:, 0] > 0) & (new_df.iloc[:, i] > 0)
# check results
new_df
对不起,我觉得我原来的问题不清楚。我只是为了(希望)更清晰地编辑了它。我认为,如果不同列中的元素>第一列中的元素,那么您提供的代码将进行比较。我需要看看这两个值是否都大于0。