我可以使用np.minimum
和np.maximum
使用广播,例如:
a.shape = (100, 5)
b.shape = (5,)
c = np.mininum(a,b)
c.shape = (100, 5) # minumum elementwise between a and b
我如何做这样的事情,但是使用pandas DataFrame
和Series
个对象?
我们无法使用value
属性,因为我们可能会丢失列的顺序。我想考虑这个顺序。
答案 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
属性来完成