沿着一个轴的一系列 Pandas element-wise min max

标签 pandas dataframe max min elementwise-operations

我有一个数据框:

df = 
             A    B    C    D
DATA_DATE
20170103   5.0  3.0  NaN  NaN
20170104   NaN  NaN  NaN  1.0
20170105   1.0  NaN  2.0  3.0

我有一个系列
s = 
DATA_DATE
20170103    4.0
20170104    0.0
20170105    2.2

我想按元素运行 max()功能和对齐 s沿着 df 的列.换句话说,我想得到
result = 
             A    B    C    D
DATA_DATE
20170103   5.0  4.0  NaN  NaN
20170104   NaN  NaN  NaN  1.0
20170105   2.2  NaN  2.2  3.0

做这个的最好方式是什么?我查过 single column comparisonseries to series comparison但还没有找到针对系列运行数据帧的有效方法。

奖励:不确定答案是否会从上面不言自明,但是如果我想对齐 s 该怎么做沿df (假设尺寸匹配)?

最佳答案

数据:

In [135]: df
Out[135]:
             A    B    C    D
DATA_DATE
20170103   5.0  3.0  NaN  NaN
20170104   NaN  NaN  NaN  1.0
20170105   1.0  NaN  2.0  3.0

In [136]: s
Out[136]:
20170103    4.0
20170104    0.0
20170105    2.2
Name: DATA_DATE, dtype: float64

解决方案:
In [66]: df.clip_lower(s, axis=0)
C:\Users\Max\Anaconda4\lib\site-packages\pandas\core\ops.py:1247: RuntimeWarning: invalid value encountered in greater_equal
  result = op(x, y)
Out[66]:
             A    B    C    D
DATA_DATE
20170103   5.0  4.0  NaN  NaN
20170104   NaN  NaN  NaN  1.0
20170105   2.2  NaN  2.2  3.0

我们可以使用以下 hack 来摆脱 RuntimeWarning :
In [134]: df.fillna(np.inf).clip_lower(s, axis=0).replace(np.inf, np.nan)
Out[134]:
             A    B    C    D
DATA_DATE
20170103   5.0  4.0  NaN  NaN
20170104   NaN  NaN  NaN  1.0
20170105   2.2  NaN  2.2  3.0

关于沿着一个轴的一系列 Pandas element-wise min max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44012431/

相关文章:

python - Pandas value_counts() 中的值分组

python - to_csv 上的数据框标题

Python - Groupby DataFrameGroupBy 对象

python - Pandas 值(value)错误: Shape of passed values

python - 如果不包含在另一个列表中,则从数据框中的列表项中删除元素的优雅方法

python - Pandas DataFrame 的条件计算列

swift - 最大(_ :_:) and min(_:_:) in an Int extension in Swift

python - 在包含字符串和整数的列表上使用 max()

Mysql 更新字段与其他 2 个字段之间的最大值

python - Pandas:如何找到每个子组的组成员类型的百分比?