numpy.minimum应用于pandas DataFrame和Series

时间:2015-08-28 08:59:27

标签: python numpy pandas

我可以使用np.minimumnp.maximum使用广播,例如:

a.shape = (100, 5)
b.shape = (5,)
c = np.mininum(a,b)
c.shape = (100, 5) # minumum elementwise between a and b

我如何做这样的事情,但是使用pandas DataFrameSeries个对象?

我们无法使用value属性,因为我们可能会丢失列的顺序。我想考虑这个顺序。

2 个答案:

答案 0 :(得分:0)

这可能不是最有效的方法,但它会保留您的列顺序。您只需将<%= link_to t('.edit', :default => t("helpers.links.edit")), edit_user_path(@user), :class => 'btn btn-default' %> dataframe转换回series数组即可执行numpy操作,即将转换回minimum。例如:

dataframe

答案 1 :(得分:0)

我不清楚你在这里尝试什么,因为在numpy中它不会起作用,因为形状无法播放:

In [188]:
a = np.random.randn(100,5)
b = np.random.randn(100)
c = np.minimum(a,b)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-188-f59fe6dbb41e> in <module>()
      1 a = np.random.randn(100,5)
      2 b = np.random.randn(100)
----> 3 c = np.minimum(a,b)

ValueError: operands could not be broadcast together with shapes (100,5) (100,) 

如果维度被交换,那么它可以工作:

In [193]:
a = np.random.randn(100,5)
b = np.random.randn(100)
c = np.minimum(a.T,b)
c.shape

Out[193]:
(5, 100)

因此,对于大熊猫,以下方法可行:

In [191]:
s = pd.Series(np.random.randn(100))
df = pd.DataFrame(np.random.randn(100,3))
np.minimum(df.T,s.values)

Out[191]:
         0         1         2         3         4         5         6   \
0 -0.462166 -0.753243 -0.857485 -0.783888 -1.058906 -1.782304 -2.866326   
1  0.586516 -0.735980 -0.857485 -1.005976 -1.015092 -1.782304 -2.866326   
2 -1.689027 -0.735980 -1.102960 -0.283301 -1.015092 -1.782304 -2.866326   

         7         8         9     ...           90        91        92  \
0 -0.967473 -0.824018 -0.633347    ...     0.022141 -0.794049 -0.522190   
1 -0.967473 -0.824018  0.066065    ...    -0.225902 -0.794049 -0.694794   
2 -0.967473 -0.824018  0.066065    ...     0.022141 -0.794049  0.278394   

         93        94        95        96        97        98        99  
0 -0.365531 -0.330756 -1.495789 -1.375226 -1.097268 -1.395099 -1.971968  
1 -1.805734 -0.330756 -1.495789 -1.375226 -1.097268 -1.395099 -0.543660  
2 -1.328497 -0.330756 -1.495789 -1.375226 -1.097268 -1.395099 -0.104600  

[3 rows x 100 columns]

所以你需要转换df(如果需要)以便广播工作,然后系列需要展平为1-D数组,在这种情况下可以通过调用.values属性来完成