【问题标题】:Replicate the data in pandas dataframe复制熊猫数据框中的数据
【发布时间】:2017-03-04 05:32:38
【问题描述】:

我在数据框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,以便定期复制所有数据。

【问题讨论】:

  • 你想让每一行重复n次吗?

标签: python python-3.x pandas dataframe


【解决方案1】:

如果您不关心订单,那么这应该可以:

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

【讨论】:

  • 谢谢。与此同时,我发现了同样的情况:)
  • @Peaceful np :)
【解决方案2】:

考虑数据框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

时间测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-05
    • 2022-07-20
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 2021-09-17
    • 2021-11-09
    相关资源
    最近更新 更多