当我尝试在pandas系列上使用简单乘法时,我得到索引结果的索引如下:
pd.Series([1, 2, 3]) * pd.Series([4, 5, 6])
>>> 0 4
1 10
2 18
我想以“嵌套”方式执行此操作,如下所示:
>>> 0 4
1 5
2 6
3 8
4 10
5 12
6 12
7 15
8 18
有没有办法以numpy或pandas的方式做到这一点?或者我需要使用for循环吗?如果我在大数据集中使用for循环,则该过程需要很长时间。
另外,我如何将这种方法用于不同的功能呢?谢谢你的帮助。
答案 0 :(得分:3)
a = pd.Series([1, 2, 3])
b = pd.Series([4, 5, 6])
c = pd.Series(np.multiply.outer(a, b).ravel())
c = pd.Series(a.repeat(len(b)).values * np.tile(b, len(a)))
print (c)
0 4
1 5
2 6
3 8
4 10
5 12
6 12
7 15
8 18
dtype: int64
编辑:
感谢您shivsn
建议使用numpy.outer
:
c = pd.Series(np.outer(a, b).ravel())
<强>计时强>:
np.random.seed(2018)
N = 10000
a = pd.Series(np.random.randint(1000, size=N))
b = pd.Series(np.random.randint(1000, size=N))
In [81]: %timeit pd.Series(np.outer(a, b).ravel())
1 loop, best of 3: 174 ms per loop
In [82]: %timeit pd.Series(np.multiply.outer(a, b).ravel())
10 loops, best of 3: 174 ms per loop
In [83]: %timeit pd.Series(a.repeat(len(b)).values * np.tile(b, len(a)))
1 loop, best of 3: 1.2 s per loop
In [84]: %%timeit
...: index = pd.MultiIndex.from_product([a , b], names = ["a", "b"])
...: df = pd.DataFrame(index = index).reset_index()
...: df['a'] * df['b']
...:
1 loop, best of 3: 3.01 s per loop
答案 1 :(得分:1)
您可以使用pd.MultiIndex.from_product
方法。
In[1]:
a = [1, 2, 3]
b = [4, 5, 6]
index = pd.MultiIndex.from_product([a , b], names = ["a", "b"])
df = pd.DataFrame(index = index).reset_index()
dataf = pd.DataFrame({"Result" : df['a'] * df['b']})
输出
Out[1]:
Result
0 4
1 5
2 6
3 8
4 10
5 12
6 12
7 15
8 18
答案 2 :(得分:1)
一种有效的方法是使用import React from "react";
import { render } from "react-dom";
import Hello from "./Hello";
class App extends React.Component {
state = {
articles: []
};
componentDidMount() {
fetch("https://hacker-news.firebaseio.com/v0/jobstories.json?print=pretty")
.then(res => res.json())
.then(articles => {
articles.map(item => {
fetch(`https://hacker-news.firebaseio.com/v0/item/${item}.json?print=pretty`)
.then(res => res.json())
.then(detailArticles => {
const articles = this.state.articles.concat(detailArticles);
this.setState({ articles });
});
});
});
}
render() {
return <p>{JSON.stringify(this.state.articles) }</p>;
}
}
render(<App />, document.getElementById("root"));
:
numpy
结果:
a = pd.Series([1, 2, 3])
b = pd.Series([4, 5, 6])
c = pd.Series((b.values * a.values[:, None]).ravel())