遍历df以比较值

时间:2019-05-09 13:23:20

标签: 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,那么我的代码还会执行其他操作。

我认为有一种简单的方法可以遍历我所缺少的行和列。

2 个答案:

答案 0 :(得分:1)

每轴= 1列使用DataFrame.rolling,按条件比较,并通过True测试两者中是否至少有一个any,或者如果有必要则测试两者是否均为True将更改any更改为all

第一列填充了NaN,因此(我希望)对于最后一列NaNDataFrame.shift,将它们替换为DataFrame.fillna并强制转换为{{1 }}:

boolean

答案 1 :(得分:0)

看看这个建议可能对您有用。

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