You can apply a function to each row of the DataFrame with apply
method. In the applied function, you can first transform the row into a boolean array using between
method or with standard relational operators, and then count the True
values of the boolean array with sum
method.
import pandas as pd
df = pd.DataFrame({
'id0': [1.71, 1.72, 1.72, 1.23, 1.71],
'id1': [6.99, 6.78, 6.01, 8.78, 6.43],
'id2': [3.11, 3.11, 4.99, 0.11, 2.88]})
def count_values_in_range(series, range_min, range_max):
# "between" returns a boolean Series equivalent to left <= series <= right.
# NA values will be treated as False.
return series.between(left=range_min, right=range_max).sum()
# Alternative approach:
# return ((range_min <= series) & (series <= range_max)).sum()
range_min, range_max = 1.72, 6.43
df["n_values_in_range"] = df.apply(
func=lambda row: count_values_in_range(row, range_min, range_max), axis=1)
print(df)
Resulting DataFrame:
id0 id1 id2 n_values_in_range
0 1.71 6.99 3.11 1
1 1.72 6.78 3.11 2
2 1.72 6.01 4.99 3
3 1.23 8.78 0.11 0
4 1.71 6.43 2.88 2