#python #pandas
Вопрос:
data
У меня есть фрейм данных, и у меня есть вызываемый datetime
столбец created_at
и вызываемый столбец text
. Я хотел бы извлечь строки, created_at
день которых совпадает с днем ввода (из заданного диапазона), а также text
значение, начинающееся с буквы «а».
Мой фрейм данных довольно большой, поэтому я подумал, что сначала я сгруппирую по дням, а затем использую сгруппированный фрейм данных для фильтрации для каждого отдельного дня и текста.
data.set_index('created_at').groupby(pd.Grouper(freq='D'))
Однако я не уверен, как применить окончательный фильтр. (Я также не уверен, что это лучший способ достичь того, чего я хотел)
Комментарии:
1. групповой фильтр ? При очень минимальном понимании того, как выглядит ваш фрейм данных и чего вы хотите достичь, трудно определить, является ли это лучшим способом достижения вашей цели.
2. @HenryEcker Я хочу получить все
created_at
совпадения, которые я даю в деньtext
столбец также должен начинаться с «а». Единственная проблема заключается в том, что сам фрейм данных содержит много строк, и я хочу выполнять эту операцию в течение многих дней.
Ответ №1:
Я не знаю остального, потому что вы не дали нам пример сокращенной версии, но я могу, по крайней мере, сопоставить входные данные со столбцом.
input = input("input datetime : ")
created_at_column = df.loc[:, created_at] # df is your DataFrame
[x for x in list(created_at_column) if x == input]
Ответ №2:
Как сказал @HenryEcker, трудно определить лучший выбор для вас. Я генерирую 1836 дат между 2021-05-01 и 2021-05-31 и 1836 слов из nltk (нижний регистр)
# criteria
input_day = "2021-05-30"
first_letter = "a"
# Pandas to Numpy
created_at = data["created_at"].dt.date.values.astype("datetime64[D]")
text = data["text"].values.astype("<U1") # keep only the first letter
# Filter
out = data.iloc[np.nonzero((created_at == np.datetime64(input_day))
amp; (text == first_letter))]
>>> out
created_at text
1794 2021-05-30 07:54:46.103542234 alienability
1819 2021-05-30 17:43:19.455040872 anthologically
1820 2021-05-30 18:06:51.989100817 appreciativ
1830 2021-05-30 22:02:17.329700272 acoustician
1832 2021-05-30 22:49:22.397820163 afternote