nrcjea001
nrcjea001

Reputation: 1057

Pandas: row comparisons by group based on a condition across 2 columns

I want to do row comparisons by group based on a condition across 2 columns. This condition is: (col1(i)-col1(j))*(col2(i)-col2(j)) <= 0, where we are comparing every row i with row j in columns col1 and col2. If the condition is satisfied for all row comparisons in the group, then set true for that group, else false.

data = {'group':['A', 'A', 'A', 'B', 'B', 'B'], 
                 'col1':[1, 2, 3, 2, 3, 1], 'col2':[4, 3, 2, 2, 3, 1]} 
df = pd.DataFrame(data)
df

with output

A True
B False

Upvotes: 2

Views: 73

Answers (1)

anky
anky

Reputation: 75080

You can use shift for comparision with next row along with groupby+all for checking if all items in the group is True:

cond=((df['col1']-df['col1'].shift(-1))*(df['col2']-df['col2'].shift(-1))<=0)&(df['group']==df['group'].shift(-1))
cond.groupby(df['group']).all()

group
A     True
B    False
dtype: bool

Upvotes: 2

Related Questions