如何在pandas中复制行?

时间:2015-07-01 06:08:33

标签: python pandas

鉴于大熊猫DataFrame

    A
0  11
1  22

我想在插入带有运行值的新列B时复制每一行,以获得结果DataFrame

    A  B
0  11  0
1  11  1
2  11  2
3  22  0
4  22  1
5  22  3

我设法通过以下循环执行此操作:

a = pd.DataFrame([[11],
                  [22],
                  ], columns=['A'])
n = 3
a['B'] = 1
res = a.copy()
for i in range(n-1):
  a['B'] = i+2
  res = res.append(a,ignore_index=1)
res = res.sort(['A','B'],axis=0).reset_index(drop=True)

但我想知道是否有更清洁,更有效的方法?

2 个答案:

答案 0 :(得分:1)

这是一种方法。

import pandas as pd
import numpy as np

df = pd.DataFrame([11, 22], columns=['A'])

Out[61]: 
    A
0  11
1  22

def replicate_func(group, n=3):
    return pd.DataFrame(dict(A=np.repeat(group.A.values, n), B=np.arange(n)))

df.groupby(level=0).apply(replicate_func).reset_index(drop=True)

Out[62]: 
    A  B
0  11  0
1  11  1
2  11  2
3  22  0
4  22  1
5  22  2

答案 1 :(得分:1)

为什么不采用这种方法:

import pandas as pd

df = pd.DataFrame([11, 22], columns=['A'])

pd.DataFrame({'A':[x for x in df.A.tolist() for i in range(n)],'B':range(n)*len(df)})

Out[29]:
    A  B
0  11  0
1  11  1
2  11  2
3  22  0
4  22  1
5  22  2