【问题标题】:Multiply pandas data-frame to a fixed number of rows将熊猫数据框乘以固定数量的行
【发布时间】:2018-03-26 17:10:06
【问题描述】:

我有一个数据框。我想将(基本上复制数据帧)乘以固定数量的目标行。

df:

col1    col2    col3
A1      B1      C1
A13     B13     C13
A27     B27     C27

我想复制这个数据框,这样生成的数据框应该有 10 行,基本上每行应该乘以 3 次,第 10 行可以是三行中的任何一行。

【问题讨论】:

  • 所有列的dtypes都相同?

标签: python pandas duplicates


【解决方案1】:

我认为需要divmod 重复所有行并且只重复一个:

N = 10

a, b = divmod(N,len(df))
print (a, b)
3 1

如果所有列都具有与numpy.repeat 相同的dtype 的解决方案:

c = np.repeat(df.values, a, axis=0)
d = np.repeat(df.values[-1], b, axis=0)

df = pd.DataFrame(np.vstack((c,d)), columns=df.columns)
print (df)
  col1 col2 col3
0   A1   B1   C1
1   A1   B1   C1
2   A1   B1   C1
3  A13  B13  C13
4  A13  B13  C13
5  A13  B13  C13
6  A27  B27  C27
7  A27  B27  C27
8  A27  B27  C27
9  A27  B27  C27

如果可能,解决方案不同的 dtypes:

只有带有concat 的熊猫解决方案:

df = pd.concat([df] * a + [df.iloc[[-1]]] * b).sort_values('col1').reset_index(drop=True)
print (df)
  col1 col2 col3
0   A1   B1   C1
1   A1   B1   C1
2   A1   B1   C1
3  A13  B13  C13
4  A13  B13  C13
5  A13  B13  C13
6  A27  B27  C27
7  A27  B27  C27
8  A27  B27  C27
9  A27  B27  C27

仅使用重复索引和loc 用于重复行的解决方案:

idx = np.hstack((np.repeat(df.index[:-1], a), np.repeat(df.index[-1], a + b)))
df = df.loc[idx].reset_index(drop=True)

【讨论】:

    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2020-04-06
    • 2018-01-24
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多