在pandas dataframe

时间:2017-03-04 05:32:39

标签: python python-3.x pandas dataframe

我在数据框df中有一些数据,其长度为n,而我正在创建一个更长的数据框dg,其长度为10n。我想将数据从df复制到dg,以便dg中的数据定期填充df中的数据。我试过以下:

dg = pd.DataFrame(index = range(10*n), columns = columns)

for i in range(0, 10*n, n):
    for j in range(n):
        dg[col][i : i+n] = df[col][0:n]

但是,这非常慢。有没有更快的方法来实现相同的目标?理想情况下,我希望看到一个解决方案,我可以简单地取df并将其长度扩展到10n,这样所有数据都可以定期复制。

2 个答案:

答案 0 :(得分:2)

如果您不关心订单,那么这应该有效:

import pandas as pd
x = pd.DataFrame({"data": [1,2]})
df = pd.concat([x]*5, ignore_index=True)
df

输出:

    data
0   1
1   2
2   1
3   2
4   1
.
.

如果您关心订单,那么您可以采用这种方法:

import numpy as np
df = x.loc[np.repeat(x.index.values, 3)]
df

输出:

    data
0   1
0   1
0   1
1   2
1   2
1   2

答案 1 :(得分:0)

考虑数据框df

np.random.seed([3,1415])
df = pd.DataFrame(np.random.rand(4, 5), columns=list('abcde'))
df

          a         b         c         d         e
0  0.444939  0.407554  0.460148  0.465239  0.462691
1  0.016545  0.850445  0.817744  0.777962  0.757983
2  0.934829  0.831104  0.879891  0.926879  0.721535
3  0.117642  0.145906  0.199844  0.437564  0.100702

pandas

使用iloc

r = np.arange(len(df)).repeat(3)
df.iloc[r].reset_index(drop=True)

           a         b         c         d         e
0   0.444939  0.407554  0.460148  0.465239  0.462691
1   0.444939  0.407554  0.460148  0.465239  0.462691
2   0.444939  0.407554  0.460148  0.465239  0.462691
3   0.016545  0.850445  0.817744  0.777962  0.757983
4   0.016545  0.850445  0.817744  0.777962  0.757983
5   0.016545  0.850445  0.817744  0.777962  0.757983
6   0.934829  0.831104  0.879891  0.926879  0.721535
7   0.934829  0.831104  0.879891  0.926879  0.721535
8   0.934829  0.831104  0.879891  0.926879  0.721535
9   0.117642  0.145906  0.199844  0.437564  0.100702
10  0.117642  0.145906  0.199844  0.437564  0.100702
11  0.117642  0.145906  0.199844  0.437564  0.100702

numpy

r = np.arange(len(df)).repeat(3)
pd.DataFrame(df.values[r], columns=df.columns)

           a         b         c         d         e
0   0.444939  0.407554  0.460148  0.465239  0.462691
1   0.444939  0.407554  0.460148  0.465239  0.462691
2   0.444939  0.407554  0.460148  0.465239  0.462691
3   0.016545  0.850445  0.817744  0.777962  0.757983
4   0.016545  0.850445  0.817744  0.777962  0.757983
5   0.016545  0.850445  0.817744  0.777962  0.757983
6   0.934829  0.831104  0.879891  0.926879  0.721535
7   0.934829  0.831104  0.879891  0.926879  0.721535
8   0.934829  0.831104  0.879891  0.926879  0.721535
9   0.117642  0.145906  0.199844  0.437564  0.100702
10  0.117642  0.145906  0.199844  0.437564  0.100702
11  0.117642  0.145906  0.199844  0.437564  0.100702

时间测试

enter image description here