我有一个带有日期列的数据框。按日期排序后,我希望可以按照排序顺序从数据框中读取数据。但是,使用iloc仅提供排序后的数据,但使用loc似乎可以保留排序之前的序列。有没有办法解决这个问题。我想使用“ loc”,但从数据框中获取排序后的数据。
import pandas as pd
client_dictionary = {'name': ['Michael', 'Ana', 'Sean'],
'country': ['UK', 'UK', 'USA'],
'age': [10, 51, 13],
'latest date active': ['07-05-2019', '23-12-2019', '03-04-2016']}
df = pd.DataFrame(client_dictionary)
df.head()
df['latest date active'] = df['latest date active'].astype('datetime64[ns]')
df.sort_values(by='latest date active', inplace=True)
df.reset_index()
for i in range(0, len(df)):
print("With loc: " + str(df.loc[i, 'latest date active']) + ", with iloc: " + str(df.iloc[i, 3]))
运行上面的代码时,我得到以下输出:
With loc: 2019-07-05 00:00:00, with iloc: 2016-03-04 00:00:00
With loc: 2019-12-23 00:00:00, with iloc: 2019-07-05 00:00:00
With loc: 2016-03-04 00:00:00, with iloc: 2019-12-23 00:00:00
答案 0 :(得分:0)
重置索引时,您必须重新分配DataFrame或传递inplace
参数:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reset_index.html
df.sort_values(by='latest date active', inplace=True)
df.reset_index(inplace=True)
现在它们应该等效。