Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
378 views
in Technique[技术] by (71.8m points)

python - Multiple logical comparisons in pandas df

If I have the following pandas df

A   B   C   D
1   2   3   4
2   2   3   4

and I want to add a new column to be 1, 2 or 3 depending on,

(A > B) && (B > C) = 1
(A < B) && (B < C) = 2
Else = 3

whats the best way to do this?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You can use numpy.select to structure your multiple conditions. The final parameter represents default value.

conditions = [(df.A > df.B) & (df.B > df.C),
              (df.A < df.B) & (df.B < df.C)]

values = [1, 2]

df['E'] = np.select(conditions, values, 3)

There are several alternatives: nested numpy.where, sequential pd.DataFrame.loc, pd.DataFrame.apply. The main benefit of this solution is readability while remaining vectorised.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...