Python 基于索引复制行会使行倍增,而不是复制

Python 基于索引复制行会使行倍增,而不是复制,python,python-3.x,pandas,dataframe,replication,Python,Python 3.x,Pandas,Dataframe,Replication,我有dataframe,我想在其中复制几行: X Y diff No Index 1d 0.000 0.017 0.000e+00 0 2D 0.083 0.017 3.000e-03 1 3D 0.250 0.017 7.200e-03 2 6D 0.500 0.019 2.400e-03 3

我有dataframe,我想在其中复制几行:

         X      Y       diff        No
Index                              
1d       0.000   0.017  0.000e+00   0
2D       0.083   0.017  3.000e-03   1
3D       0.250   0.017  7.200e-03   2
6D       0.500   0.019  2.400e-03   3
1DD      1.000   0.020  2.400e-03   4
2DD      2.000   0.023  1.300e-03   5
3DD      3.000   0.024  1.000e-03   6
5DD      5.000   0.026  6.500e-04   7
7DD      7.000   0.027  2.667e-04   8
10DD     10.000  0.028  1.200e-04   9
20DD     20.000  0.029  1.200e-04   10
30DD     30.000  0.031  0.000e+00   11
我想用相同的索引名复制30dd30次,20dd20次,10dd10次

我尝试了这个,而不是复制它

for i in range(4):
    test1 = df.append(df.ix['30DD']*30)

      X      Y       diff        No
Index                              
1d       0.000   0.017  0.000e+00   0
2D       0.083   0.017  3.000e-03   1
3D       0.250   0.017  7.200e-03   2
6D       0.500   0.019  2.400e-03   3
1DD      1.000   0.020  2.400e-03   4
2DD      2.000   0.023  1.300e-03   5
3DD      3.000   0.024  1.000e-03   6
5DD      5.000   0.026  6.500e-04   7
7DD      7.000   0.027  2.667e-04   8
10DD     10.000  0.028  1.200e-04   9
20DD     20.000  0.029  1.200e-04   10
30DD     30.000  0.031  0.000e+00   11
30DD     900     0.918  0           330

添加新行,但减去1,因为对于原始的
DataFrame

vals = ['30DD'] * 29 + ['20DD'] * 19 + ['10DD'] * 9
df = df.append(df.loc[vals])
最后,如果要按索引值的数量对值进行排序:

df = df.iloc[df.index.str.extract('(\d+)').astype(int).squeeze().argsort()]
使用,可以为要追加的行创建索引列表。然后馈送到原始数据帧并附加到原始数据帧

vals = ['30DD', '20DD', '10DD']
counts = [30, 20, 10]

df = df.append(df.loc[np.repeat(vals, counts)])

旁注:
ix
现已被弃用。改为使用
loc
iloc
。我不清楚。但是,更重要的是,我认为OP可以计算出如何减去一。请随意更正,否则会有问题吗?是的。我希望添加9行、19行和9行,因为我已经添加了一行。这是正确的