Вставить строки столбца между строками другого - PullRequest
0 голосов
/ 24 октября 2018

У меня есть df, состоящий из двух столбцов, подобных этому:

    rows    A     B

    0       1     7
    1       9     11
    2       20    30
    3       32    35

Я хотел бы создать еще один столбец, чтобы каждая строка столбца A вставлялась между двумя строками столбца B.

Вывод будет выглядеть так:

    rows    C

    0       7
    1       9
    2       11
    3       20
    4       30
    5       32
    6       35

Большое спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Возьмите массив столбцов A и B, затем используйте flatten или ravel и получите значения из первого индекса:

df1 = pd.DataFrame(df[['A','B']].values.flatten()[1:],columns=['C']).\
                   reset_index().rename(columns={'index':'rows'}

ИЛИ:

df1 = pd.DataFrame(df[['A','B']].values.ravel()[1:],columns=['C']).\
                       reset_index().rename(columns={'index':'rows'})

print(df1)

   rows   C
0     0   7
1     1   9
2     2  11
3     3  20
4     4  30
5     5  32
6     6  35
0 голосов
/ 24 октября 2018

Используйте ravel с arange и DataFrame contructor:

a = df[['A','B']].values.ravel()[1:]

df1 = pd.DataFrame({'rows':np.arange(len(a)), 'C':a})
print (df1)
   rows   C
0     0   7
1     1   9
2     2  11
3     3  20
4     4  30
5     5  32
6     6  35

Вы также можете проверить В чем разница междуСгладить и Равель функции в NumPy?

Или используйте melt:

df1 = (df.melt(['rows'], value_name='C')
        .sort_values('rows')['C']
        .iloc[1:]
        .reset_index(drop=True)
        .rename_axis('rows')
        .reset_index())
print (df1)
   rows   C
0     0   7
1     1   9
2     2  11
3     3  20
4     4  30
5     5  32
6     6  35
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...