#python #pandas #dataframe #data-wrangling
#python #pandas #фрейм данных #перебор данных
Вопрос:
У меня есть фрейм данных, подобный:
df = pd.DataFrame({30: {'2020-10-09': 12.79, '2020-10-12': 12.83, '2020-10-13': 12.88, '2020-10-14': 12.93, '2020-10-15': 12.99, '2020-10-16': 13.07, '2020-10-19': 13.16, '2020-10-20': 13.24, '2020-10-21': 13.32, '2020-10-22': 13.42}, 365: {'2020-10-09': 12.27, '2020-10-12': 12.27, '2020-10-13': 12.28, '2020-10-14': 12.29, '2020-10-15': 12.29, '2020-10-16': 13.07, '2020-10-19': 12.31, '2020-10-20': 12.32, '2020-10-21': 12.32, '2020-10-22': 12.33}})
Я хочу найти строки, в которых значения равны во всех столбцах. Я могу сделать это с .loc
помощью, но это означало бы, что мне придется жестко кодировать имена столбцов, чего я не хочу делать, поскольку возможно, у меня будет больше столбцов для сравнения в будущем. Я довольно близок к
df.eq(df.iloc[:, 0], axis=0)
Что дает
30 365
2020-10-09 True False
2020-10-12 True False
2020-10-13 True False
2020-10-14 True False
2020-10-15 True False
2020-10-16 True True
2020-10-19 True False
2020-10-20 True False
2020-10-21 True False
2020-10-22 True False
но я не могу получить строки с True
в каждом столбце. Я думал, что использование df[df.eq(df.iloc[:, 0], axis=0)]
должно работать, но оно выдает ошибку с несколькими индексами. Спасибо!
Ответ №1:
Вы можете добавить DataFrame.all
для проверки, если все True
и использовать boolean indexing
:
df = df[df.eq(df.iloc[:, 0], axis=0).all(axis=1)]
print (df)
30 365
2020-10-16 13.07 13.07
Комментарии:
1. Потрясающе. Спасибо, я не забуду
.all
проверить логические значения.