Объединение столбцов по числу перед десятичной запятой в имени столбца

#pandas #dataframe

Вопрос:

У меня есть следующий фрейм данных (три примера столбцов ниже):

 import pandas as pd
array = {'25.2': [False, True, False], '25.4': [False, False, True], '27.78': [True, False, True]}
df = pd.DataFrame(array)


    25.2    25.4    27.78
0   False   False   True
1   True    False   False
2   False   True    True
 

Я хочу создать новый фрейм данных с консолидированными именами столбцов, т. Е. Добавить 25.2 и 25.4 в 25 новых столбцов. Если одно из значений в отдельных столбцах равно True, то значение в новом столбце равно True.

Ожидаемый результат:

       25     27
0   False   True
1   True    False
2   True    True
 

Есть какие-нибудь идеи?

Ответ №1:

использовать rename() groupby() sum() :

 df=(df.rename(columns=lambda x:x.split('.')[0])
      .groupby(axis=1,level=0).sum().astype(bool))
 

или

В 2 этапа:

 df.columns=[x.split('.')[0] for x in df]
#OR
#df.columns=df.columns.str.replace(r'.d ','',regex=True)
df=df.groupby(axis=1,level=0).sum().astype(bool)
 

выход:

     25      27
0   False   True
1   True    False
2   True    True
 

Примечание: Если у вас есть int столбцы, вы можете использовать round() вместо split()

Ответ №2:

Другой способ:

 >>> df.T.groupby(np.floor(df.columns.astype(float))).sum().astype(bool).T

    25.0   27.0
0  False   True
1   True  False
2   True   True