我在数据框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,这样所有数据都可以定期复制。
答案 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
时间测试