переупорядочить фреймворк для парных элементов - PullRequest
0 голосов
/ 16 июня 2020

У меня есть такой фрейм данных:

id           Shimmer
P01_S01_a    2.31
P01_S01_b    3.87
P01_S02_a    2.54
P01_S02_b    2.96
P02_S01_a    1.78
P02_S01_b    3.19
P02_S02_1    2.04
P02_S02_2    2.08

, и я хочу изменить его так:

id           Shimmer_a      Shimmer_b
P01_S01      2.31           3.87
P01_S02      2.54           2.96
P02_S01      1.78           3.19
P02_S02      2.04           2.08

Я думаю, было бы хорошо начать с диапазона l oop, потому что это всегда попарно, но я не знаю, как сказать python, чтобы переставить.

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Используйте Series.replace со словарем и $ для последних значений строк, здесь последний 1, 2, измените форму на Series.str.rsplit с n=1 для разделения по последнему _, затем DataFrame.pivot и очистка данных DataFrame.rename_axis с помощью DataFrame.add_prefix:

df1 = (df.join(df['id'].replace({'1$':'a', '2$':'b'}, regex=True)
                     .str.rsplit('_', expand=True, n=1))
         .pivot(0,1,'Shimmer')
         .rename_axis(index='id', columns=None)
         .add_prefix('Shimmer_')
         .reset_index())

Решение без rename последние значения после _, но со счетчиком на GroupBy.cumcount:

df1 = (df.assign(a = df['id'].str.rsplit('_', n=1).str[0], 
                g = lambda x: x.groupby('a').cumcount())
         .pivot('a','g','Shimmer')
         .rename(columns=({0:'a', 1:'b'}))
         .rename_axis(index='id', columns=None)
         .add_prefix('Shimmer_')
         .reset_index()
        )
print (df1)
        id  Shimmer_a  Shimmer_b
0  P01_S01       2.31       3.87
1  P01_S02       2.54       2.96
2  P02_S01       1.78       3.19
3  P02_S02       2.04       2.08
1 голос
/ 16 июня 2020

Комбинация str.split и pivot:

temp = df['id'].str.split('_')
df['id'],df['group'] = temp.str[:-1].str.join('_'), temp.str[-1]
df['group'].replace({'1':'a', '2':'b'}, inplace=True)

df = df.pivot(index='id', columns='group', values='Shimmer')
df.columns = ['Shimmer_a', 'Shimmer_b']

        Shimmer_a   Shimmer_b
id      
P01_S01 2.31    3.87
P01_S02 2.54    2.96
P02_S01 1.78    3.19
P02_S02 2.04    2.08
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...