I have a pandas series series
. If I want to get the element-wise floor or ceiling, is there a built in method or do I have to write the function and use apply? I ask because the data is big so I appreciate efficiency. Also this question has not been asked with respect to the Pandas package.
You can use NumPy's built in methods to do this: np.ceil(series)
or np.floor(series)
.
Both return a Series object (not an array) so the index information is preserved.
You could do something like this using NumPy's floor, for instance, with a dataframe
:
floored_data = data.apply(np.floor)
Can't test it right now but an actual and working solution might not be far from it.
I am the OP, but I tried this and it worked:
np.floor(series)
clip_lower
/ clip_upper
With Pandas, you can set a floor via clip_lower
or ceiling via clip_upper
:
s = pd.Series([-1, 0, -5, 3])
print(s.clip_lower(0))
# 0 0
# 1 0
# 2 0
# 3 3
# dtype: int64
print(s.clip_upper(0))
# 0 -1
# 1 0
# 2 -5
# 3 0
# dtype: int64
clip
pd.Series.clip
supports more generalised functionality, e.g. applying and flooring a ceiling simultaneously, e.g. s.clip(-1, 1)
.
来源:https://stackoverflow.com/questions/27592456/floor-or-ceiling-of-a-pandas-series-in-python