#python #pandas
#python #pandas
Вопрос:
У меня есть фрейм данных, подобный
A B C D
one 2 10.0 0 11
two 5 NaN NaN 8
и сделал groupby с
df.groupby(np.array(['min', 'max', 'min', 'max']), axis=1)
Теперь я хочу объединить группы с разными функциями. Группа ‘min’ должна быть объединена с .sum(axis=1)
, в то время как группа ‘max’ должна быть объединена с .sum(axis=1, skipna=False)
.
Желаемый результат будет
min max
one 2 21
two 5 NaN
Есть ли какой-либо встроенный способ сделать это?
Комментарии:
1.
df.groupby(['min', 'max', 'min', 'max'], axis=1)
Правильно?2. Это работает для меня, но я поясню это.
Ответ №1:
Я считаю, что вам нужна пользовательская функция, потому что это не built-in
:
def f(x):
if x.name == 'min':
return x.sum(axis=1)
elif x.name == 'max':
return x.sum(axis=1, skipna=False)
df = df.groupby(['min', 'max', 'min', 'max'], axis=1).apply(f)
print (df)
max min
one 21.0 2.0
two NaN 5.0