У меня есть Dataframe с столбцом данных в диапазоне от 2005-01-01 до 2014-12-31. Как отсортировать столбцы? - PullRequest
0 голосов
/ 05 мая 2020

ввод:

data["Date"] = ["2005-01-01", "2005-01-02" , ""2005-01-03" ,..., "2014-12-30","2014-12-31"]

как я могу отсортировать столбец так, чтобы столбец давал 1-ю дату каждого года, 2-ю дату каждого и так далее:

т.е.

вывод:

data["Date"] = ["2005-01-01","2006-01-01","2007-01-01", ... "2013-12-31","2014-12-31"]

ПРИМЕЧАНИЕ: если в столбце даты нет високосных дней

Ответы [ 5 ]

0 голосов
/ 05 мая 2020

Используйте:

data["temp"] = pd.to_datetime(data["Date"]).dt.strftime("%d-%Y-%m")
data = data.sort_values(by="temp").drop(columns=["temp"])
0 голосов
/ 05 мая 2020

Почему бы вам не попробовать создать новый столбец, в котором вы измените формат даты? Примерно так:

def change_format(row):
    date_parts = row.split('-')
    new_date = date_parts(2)+"-"+date_parts(1)+"-"+date_parts(0)
    return new_date

data["Date_new_format"] = data["Date"].apply(lambda row => change_format(row))

Теперь вы можете отсортировать фрейм данных в соответствии со столбцом Date_new_format, и вы получите то, что вам нужно.

0 голосов
/ 05 мая 2020
>>> import datetime
>>> dates = [datetime.datetime.strptime(ts, "%Y-%m-%d") for ts in data["Date"]]
>>> dates.sort()
>>> sorteddates = [datetime.datetime.strftime(ts, "%Y-%m-%d") for ts in dates]
>>> sorteddates
['2010-01-12', '2010-01-14', '2010-02-07', '2010-02-11', '2010-11-16', '2010-11-
22', '2010-11-23', '2010-11-26', '2010-12-02', '2010-12-13', '2011-02-04', '2011
-06-02', '2011-08-05', '2011-11-30']
0 голосов
/ 05 мая 2020

Сначала:

data['D'] = data['Date'].apply(lambda x : datetime.datetime.strptime(x, '%Y-%m-%d'))
data['Day'] = data['D'].apply(lambda x: x.day)
data['Month'] = data['D'].apply(lambda x: x.month)
data['Year'] = data['D'].apply(lambda x: x.year)
data.drop(columns='D', inplace=True)

Затем, имея 4 столбца данных, мы сортируем его следующим образом:

data.sort_values(by=['Day','Month','Year'], inplace=True)

Наконец, вы можете удалить новые столбцы, если они вам не понадобятся:

data.drop(columns = ['Day','Month','Year'], inplace=True)
0 голосов
/ 05 мая 2020

Попробуйте использовать лямбда-выражения.

from datetime import datetime

data = {"Date": ["2005-01-02", "2005-01-01", "2014-12-30", "2014-12-31"]}
data["Date"].sort(key=lambda date: datetime.strptime(date, "%Y-%m-%d"))
...