首页 > 解决方案 > 如何使用Python按升序对熊猫数据框进行排序

问题描述

我有一个这样的数据框:

        Date          Price
0 2021-02-12 00:00:00 50
1 2021-02-11 00:00:00 2
2 2021-02-10 00:00:00 40.4
3 2021-02-09 00:00:00 775.6
4 2021-02-08 00:00:00 1000.2
5 2021-02-07 00:00:00 500

print(df.dtypes) 的列类型:

Date         datetime64[ns]
Price               float64

预期输出:

        Date          Price
0 2021-02-07 00:00:00 500
1 2021-02-08 00:00:00 1000.2
2 2021-02-09 00:00:00 775.6
3 2021-02-10 00:00:00 40.4
4 2021-02-11 00:00:00 2
5 2021-02-12 00:00:00 50

我有一个像df这样的数据框。当我做 :

df = df.sort_values(by='Date')

但即使添加升序 = True 或 False,也不会发生任何事情。

您能否按上述方式订购此数据框?

如果可能的话,您能否提供两种可能性,例如按索引和日期排序,但我希望直接按升序日期排序,而不涉及索引。

编辑更清楚:

# Converted list of dictionaries to a Dataframe
extracted_data_List_DataFrames = [pd.DataFrame(x) for x in extracted_data_List]

# Convert string to their respectiv types
for dfs in extracted_data_List_DataFrames:
    dfs['Date'] = pd.to_datetime(dfs['Date'])
    dfs['Price'] = dfs['Price'].astype('float64')

    # Sort dataframes by 'Date'
    dfs = dfs.sort_values(['Date'], ascending=False)

print(extracted_data_List_DataFrames)

你上面有我的代码。我无法使排序方法正常工作。

标签: pythonpandasdataframedatesorting

解决方案


问题是如果在循环中修改值,如果原始列表没有变化,您可以将输出分配给 DataFrame 的原始列表,例如:

for i, dfs in enumerate(extracted_data_List_DataFrames):
    dfs['Date'] = pd.to_datetime(dfs['Date'])
    dfs['Price'] = dfs['Price'].astype('float64')

    # Sort dataframes by 'Date'
    dfs = dfs.sort_values(['Date'], ascending=False)
    extracted_data_List_DataFrames[i] = dfs

另一个想法是使用inplace=True

for dfs in extracted_data_List_DataFrames:
    dfs['Date'] = pd.to_datetime(dfs['Date'])
    dfs['Price'] = dfs['Price'].astype('float64')

    # Sort dataframes by 'Date'
    dfs.sort_values(['Date'], ascending=False, inplace=True)

推荐阅读