我是 pandas 的新手,我正在嘗試對我使用的資料框進行排序。
這是融化的樣子:
id date_time sold
0 sample_id1 Monday 0 0
1 sample_id2 Monday 0 0
2 sample_id3 Monday 0 0
3 sample_id4 Monday 0 0
4 sample_id5 Monday 0 0
... ... ... ...
7387 sample_id1 Sunday 23 0
7388 sample_id2 Sunday 23 0
7389 sample_id3 Sunday 23 1
7390 sample_id4 Sunday 23 0
7391 sample_id5 Sunday 23 0
我想要的輸出會是什么樣子:
id date_time sold
0 sample_id1 Monday 0 0
1 sample_id1 Monday 1 0
2 sample_id1 Monday 2 0
3 sample_id1 Monday 3 0
4 sample_id1 Monday 4 0
5 sample_id1 Monday 5 0
6 sample_id1 Monday 6 0
7 sample_id1 Monday 7 0
8 sample_id1 Monday 8 0
9 sample_id1 Monday 9 0
... ... ... ...
7387 sample_id5 Sunday 19 0
7388 sample_id5 Sunday 20 0
7389 sample_id5 Sunday 21 1
7390 sample_id5 Sunday 22 0
7391 sample_id5 Sunday 23 0
我嘗試使用 sort_values(['id']),但輸出混合了 date_time 列 - 如下所示:
id date_time sold
0 sample_id1 Sunday 23 0
1 sample_id1 Saturday 18 0
2 sample_id1 Thursday 1 0
3 sample_id1 Monday 16 36
4 sample_id1 Saturday 19 6
我需要使用 pandas 的什么功能來實作我想要的功能?
uj5u.com熱心網友回復:
使用引數keyinDataFrame.sort_values按字典轉換值:
d = {'Monday': '0', 'Tuesday': '1', 'Wednesday': '2',
'Thursday': '3', 'Friday': '4', 'Saturday': '5', 'Sunday': '6'}
def f(x):
try:
return x.replace(d, regex=True).str.split().apply(lambda x: tuple(map(int, x)))
except:
return x
df = df.sort_values(['id', 'date_time'], key=f)
uj5u.com熱心網友回復:
不確定您的 date_time 資料型別,但您始終可以根據兩列進行排序
sort_values(['id', 'date_time'])
uj5u.com熱心網友回復:
您可以嘗試根據您的日期時間列創建兩個新列。第一個代表星期幾,星期一是 1,星期日是 7,第二個是空格后面的數字。然后根據 id 和這兩個新列進行排序。例如:
df[['weekday', 'day_no']] = df['datetime'].str.split(' ', expand=True)
df.loc[df['weekday'] == 'Monday', 'weekday_no'] = 1
df.loc[df['weekday'] == 'Tuesday', 'weekday_no'] = 2
df.loc[df['weekday'] == 'Wednesday', 'weekday_no'] = 3
...
此時,您可以對id、weekday_no和進行排序day_no。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/452461.html
上一篇:相對于主對角線對二維陣列進行排序
下一篇:在歸并排序中每n次迭代測量時間
