#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