Как я могу получить самое маленькое и самое высокое значение для каждой строки в пандах?

У меня есть данные, которые я отсортировал, ниже приведен образец данных:

missing_values  count
0               51
3               1
12              12
13              1
15              1
16              1
21              1
35              2
36              3
40              1

У меня есть следующий код:

# Get the vount of each missing value
missing_value_count = missing_values.iloc[:, 0:1].value_counts().to_frame()
missing_value_count.sort_index(inplace=True)

missing_value_count.to_csv('question.csv')
    
missing_value_count.agg(lambda s: pd.Series([*s.nlargest().index, *s.nsmallest().index],
                       ['missing_values']),
                       axis='columns')

Когда я запускаю код, я получаю следующую ошибку:

missing_value_count.agg(lambda s: pd.Series([*s.nlargest().index, *s.nsmallest().index],
                       ['missing_values']),
                       axis='columns')
Traceback (most recent call last):

  Cell In[29], line 1
missing_value_count.agg(lambda s: pd.Series([*s.nlargest().index, *s.nsmallest().index],

  File D:\Users\Mahmoud\anaconda3\Lib\site-packages\pandas\core\frame.py:9196 in aggregate
result = op.agg()

  File D:\Users\Mahmoud\anaconda3\Lib\site-packages\pandas\core\apply.py:699 in agg
result = self.obj.apply(self.orig_f, axis, args=self.args, **self.kwargs)

  File D:\Users\Mahmoud\anaconda3\Lib\site-packages\pandas\core\frame.py:9423 in apply
return op.apply().__finalize__(self, method = "apply")

  File D:\Users\Mahmoud\anaconda3\Lib\site-packages\pandas\core\apply.py:678 in apply
return self.apply_standard()

  File D:\Users\Mahmoud\anaconda3\Lib\site-packages\pandas\core\apply.py:798 in apply_standard
results, res_index = self.apply_series_generator()

  File D:\Users\Mahmoud\anaconda3\Lib\site-packages\pandas\core\apply.py:814 in apply_series_generator
results[i] = self.f(v)

  Cell In[29], line 1 in <lambda>
missing_value_count.agg(lambda s: pd.Series([*s.nlargest().index, *s.nsmallest().index],

  File D:\Users\Mahmoud\anaconda3\Lib\site-packages\pandas\core\series.py:500 in __init__
com.require_length_match(data, index)

  File D:\Users\Mahmoud\anaconda3\Lib\site-packages\pandas\core\common.py:576 in require_length_match
raise ValueError(

ValueError: Length of values (2) does not match length of index (1)

Я хочу вернуть наименьшее значение в отсутствующих_значениях с максимальными значениями в счетчике. Таким образом, в приведенных выше данных результат будет

missing_values      count
0                   51

Как я могу исправить эту часть моего кода, чтобы она возвращала наименьшее значение в отсутствующих_значениях со счетчиком hight=est?

missing_value_count.agg(lambda s: pd.Series([*s.nlargest().index, *s.nsmallest().index],
                       ['missing_values']),
                       axis='columns')

Ваш пример неоднозначен, вы хотите отдать приоритет минимальному «отсутствующим_значениям» или максимальному «количеству»? Пожалуйста, продемонстрируйте, что произойдет, если у вас есть одна строка с 0/20 и одна с 1/51.

mozway 30.05.2024 23:23

Я бы хотел 1/51. Мне нужно наибольшее количество с наименьшим значением пропущенного_значения.

mahmoud988 30.05.2024 23:27
df.sort_values(['count', 'missing_values'], ascending=[False, True]).iloc[:1]?
mozway 30.05.2024 23:33

@mozway это тоже правильный ответ.

mahmoud988 30.05.2024 23:38

Я считаю, что принятый ответ неполный (неверно, если у вас более одной строки с 51)

mozway 30.05.2024 23:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Один из способов сделать это:

    df.agg({"missing_values": min, "count":max}).to_frame().T

Нет, это не то. Как вы можете видеть, мне нужны недостающие_значения, и они считаются не отдельными парами. В выводе выше Missing_values ​​0 и счетчик 51.

mahmoud988 30.05.2024 23:05
Ответ принят как подходящий

Так?

result = missing_value_count[missing_value_count['count'] == missing_value_count['count'].max()]

где Missing_value_count — это фрейм данных с двумя предоставленными вами столбцами.

Другие вопросы по теме