Репликация строк на основе индекса умножает строки вместо репликации - PullRequest
0 голосов
/ 24 июня 2018

У меня есть фрейм данных, где я хотел бы повторить несколько строк:

         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 голосов
/ 24 июня 2018

Используя numpy.repeat, вы можете создать список индексов для строк, которые вы хотите добавить. Затем введите pd.DataFrame.loc и добавьте к исходному кадру данных.

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

df = df.append(df.loc[np.repeat(vals, counts)])
0 голосов
/ 24 июня 2018

Добавить новые строки, но вычесть 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()]
...