Pandas: Медианы столбцов на основе имен столбцов - PullRequest
2 голосов
/ 20 апреля 2020

У меня есть следующий pandas DataFrame.

df = pd.DataFrame(np.random.randn(3,6), columns=['A1','A2','A3','B1','B2','B3'])
df

           A1         A2          A3          B1          B2           B3
0   -0.409420   2.382457    1.151565    0.625461    0.224453    -0.351573
1   -0.676554   -1.485376   0.597227    0.240113    0.033963    1.224241
2   0.678698    1.392778    1.031625    0.388137    -0.566746   -0.798156

Как мне получить медиану столбцов, подобных этой

        medA     medB
0        ...      ...
1        ...      ...
2        ...      ...   

Мой фактический фрейм данных имеет 300 столбцов, поэтому Я хотел бы различать по сходству в названии столбца.

Ответы [ 2 ]

3 голосов
/ 20 апреля 2020

это выглядит как pd.wide_to_long:

(pd.wide_to_long(df.reset_index(),['A','B'],'index','idx')
  .groupby('index').median().add_prefix('med_').rename_axis(None))

или groupby с первой строкой на axis=1

df.groupby(df.columns.str[0],axis=1).median().add_prefix('med_')

      med_A     med_B
0 -0.075465 -0.317335
1 -0.355822 -0.517270
2  0.279270 -1.134389
2 голосов
/ 20 апреля 2020

Вот ответ для l oop:

dict = {}
dff = pd.DataFrame()

for letter in ['A', 'B']:
    dict[letter] = []
    for col in df.columns:
        if col.startswith(letter):
            dict[letter].append(col)
    dff[f'med_{letter}'] = df[dict[letter]].median(axis=1)

Я не уверен, что вы подразумеваете под "дифференцировать по сходству в имени столбца", здесь он просто сравнивает начало каждого имени столбца с записями в списке праймеров (['A', 'B']).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...