我有一个数据框:
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 comparison和 series 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/