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)