鉴于大熊猫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)
但我想知道是否有更清洁,更有效的方法?
答案 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