根据索引复制行会使行乘而不是复制

时间:2018-06-24 13:49:00

标签: python python-3.x pandas dataframe replication

我有一个数据框,我想在其中复制几行:

         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 30次,20DD 20次和10DD 10次。

我尝试过这个,而不是复制成倍增加

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

2 个答案:

答案 0 :(得分:1)

添加新行,但减去1,因为append到原始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()]

答案 1 :(得分:0)

使用numpy.repeat,可以为要附加的行创建索引列表。然后输入pd.DataFrame.loc并附加到原始数据框。

loops