Предположим, что у меня установлен набор диафрагмы. Есть ли способ лаконично выполнить описанные ниже операции в пандах?python pandas сортировать по группе и применять функцию
- Группа по мишени
- Внутри каждой группы, расположить данные в порядке убывания «чашелистиков длиной (см)»
- Внутри каждой группы, назначить от 1 до 5 лучших строк и от 0 до остальных?
Для тех, зная R, я просто хочу, чтобы воспроизвести следующий код (да, это было временное решение есть):
iris %>%
group_by(Species) %>%
arrange(desc(Sepal.Length)) %>%
mutate(size_tag = 1,
size_tag = cumsum(size_tag),
size_tag = ifelse(size_tag <= 5, 1, 0))
До сих пор у меня есть:
from sklearn import datasets
iris = datasets.load_iris()
iris = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= iris['feature_names'] + ['target'])
def fn(group, col_nm):
group[col_nm] = 1
group[col_nm] = np.cumsum(group[col_nm])
group[col_nm] = np.where(group[col_nm] <= 5, 1, 0)
return group
iris['size_tag'] = np.NaN
iris.groupby('target').apply(pd.DataFrame.sort_values, 'sepal length (cm)').apply(fn, args = (['size_tag']))
Результат Я получаю дополнительную строку, добавленную к DataFrame ...
Я только начинаю использовать pandas и Python, поэтому любые замечания (например, связанные с кодированием) являются welc Ома.
rpl, вы знаете о пакете пера? вы можете захватить data.frame и [перо пакет] (https://blog.rstudio.org/2016/03/29/feather/), это инструмент для улучшения взаимодействия между Python, R, он преобразует ваши данные .frame в формат, который можно обменять с R на Python и наоборот. –
Да, я знаю. Тем не менее, я счел странным экспортировать радужную оболочку из R и импортировать ее на Python, используя перо, особенно, что он доступен в sklearn. Наверное, я бы получил комментарий «Знаете ли вы, что диафрагма доступна в sklearn?» :-). Это будет иметь смысл, хотя, если я столкнусь с стеной в Питоне ... в крайнем случае. Но я твердо верю, что панды достаточно сильны :-). Поскольку это немного не работает, есть модуль ggplot для Python. – rpl