Python 如何在熊猫中复制行?

Python 如何在熊猫中复制行?,python,pandas,Python,Pandas,给定一个数据帧: A 0 11 1 22 A B 0 11 0 1 11 1 2 11 2 3 22 0 4 22 1 5 22 3 我想在插入一个新的列B时复制每一行,该列带有运行值,以便获得结果DataFrame: A 0 11 1 22 A B 0 11 0 1 11 1 2 11 2 3 22 0 4 22 1 5 22 3 我通过以下循环成功地做到了这一点: a = pd.DataFra

给定一个数据帧:

    A
0  11
1  22
    A  B
0  11  0
1  11  1
2  11  2
3  22  0
4  22  1
5  22  3
我想在插入一个新的列
B
时复制每一行,该列带有运行值,以便获得结果
DataFrame

    A
0  11
1  22
    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)

但我想知道是否有一种更干净、更有效的方法?

这里有一种方法

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
为什么不采用这种方法:

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

美好的我不知道如果
groupby.apply
返回一个
DataFrame
,它会作为另一个级别添加到
多索引中。谢谢。尽管它给出了错误的答案。但是你的答案和简迅的答案结合起来可能是最简单的:
pd.DataFrame({'a':np.repeat(df.a.values,n),'B':range(n)*len(df)})
有一些打字错误!我编辑了解决方案,它仍然是基本Python(除了Pandas)