UPDATE2:排序/在t
替換列值,但只對於那些行id == 0
(as described in this comment):
In [373]: df
Out[373]:
id t metric_1 metric_2 metric_3
0 0 86 13.333 61.989 0.017444
1 0 87 13.333 61.993 0.017569
2 0 88 13.333 61.992 0.017711
3 0 89 13.333 61.998 0.017746
4 0 90 13.333 61.993 0.017871
5 1 86 13.333 61.964 0.018511
6 1 87 20.000 61.913 0.020058
7 1 88 20.000 61.864 0.022475
8 1 89 26.667 61.802 0.025995
9 1 90 33.333 61.736 0.030689
In [374]: df.loc[df.id == 0, 't'] = df.loc[df.id == 0, 't'].sort_values(ascending=0).values
In [375]: df
Out[375]:
id t metric_1 metric_2 metric_3
0 0 90 13.333 61.989 0.017444
1 0 89 13.333 61.993 0.017569
2 0 88 13.333 61.992 0.017711
3 0 87 13.333 61.998 0.017746
4 0 86 13.333 61.993 0.017871
5 1 86 13.333 61.964 0.018511
6 1 87 20.000 61.913 0.020058
7 1 88 20.000 61.864 0.022475
8 1 89 26.667 61.802 0.025995
9 1 90 33.333 61.736 0.030689
UPDATE:更新的數據集
原始DF:
In [363]: df
Out[363]:
id t metric_1 metric_2 metric_3
0 0 86 13.333 61.989 0.017444
1 0 87 13.333 61.993 0.017569
2 0 88 13.333 61.992 0.017711
3 0 89 13.333 61.998 0.017746
4 0 90 13.333 61.993 0.017871
5 1 86 13.333 61.964 0.018511
6 1 87 20.000 61.913 0.020058
7 1 88 20.000 61.864 0.022475
8 1 89 26.667 61.802 0.025995
9 1 90 33.333 61.736 0.030689
排序完整行:
In [364]: df.sort_values(['id','t'], ascending=[1,0])
Out[364]:
id t metric_1 metric_2 metric_3
4 0 90 13.333 61.993 0.017871
3 0 89 13.333 61.998 0.017746
2 0 88 13.333 61.992 0.017711
1 0 87 13.333 61.993 0.017569
0 0 86 13.333 61.989 0.017444
9 1 90 33.333 61.736 0.030689
8 1 89 26.667 61.802 0.025995
7 1 88 20.000 61.864 0.022475
6 1 87 20.000 61.913 0.020058
5 1 86 13.333 61.964 0.018511 # <--
爲兩列(['id','t']
)排序的值,替換它們的值:
In [366]: df[['id','t']] = df[['id','t']].sort_values(['id','t'], ascending=[1,0]).values
In [367]: df
Out[367]:
id t metric_1 metric_2 metric_3
0 0 90 13.333 61.989 0.017444
1 0 89 13.333 61.993 0.017569
2 0 88 13.333 61.992 0.017711
3 0 87 13.333 61.998 0.017746
4 0 86 13.333 61.993 0.017871
5 1 90 13.333 61.964 0.018511
6 1 89 20.000 61.913 0.020058
7 1 88 20.000 61.864 0.022475
8 1 87 26.667 61.802 0.025995
9 1 86 33.333 61.736 0.030689 # <--
OLD答案:
IIUC你可以簡單排序的數據由兩列:
In [349]: df.sort_values(['id','t'], ascending=[1,1])
Out[349]:
id t metric_1 metric_2 metric_3
4 0 86 13.333 61.993 0.017871
3 0 87 13.333 61.998 0.017746
2 0 88 13.333 61.992 0.017711
1 0 89 13.333 61.993 0.017569
0 0 90 13.333 61.989 0.017444
9 1 86 33.333 61.736 0.030689
8 1 87 26.667 61.802 0.025995
7 1 88 20.000 61.864 0.022475
6 1 89 20.000 61.913 0.020058
5 1 90 13.333 61.964 0.018511
,如果你想將它分類爲您所需的數據集
(更換t
列值):
In [357]: df[['id','t']] = df[['id','t']].sort_values(['id','t']).values
In [358]: df
Out[358]:
id t metric_1 metric_2 metric_3
0 0 86 13.333 61.989 0.017444
1 0 87 13.333 61.993 0.017569
2 0 88 13.333 61.992 0.017711
3 0 89 13.333 61.998 0.017746
4 0 90 13.333 61.993 0.017871
5 1 86 13.333 61.964 0.018511
6 1 87 20.000 61.913 0.020058
7 1 88 20.000 61.864 0.022475
8 1 89 26.667 61.802 0.025995
9 1 90 33.333 61.736 0.030689 # 1 90 33.333 61.736 0.030689 as in your desired DF
現在我完全困惑 - 你想排序/更改't'列中的值('id == 1')還是不? – MaxU
是的。數據幀的ID從0到n,其中n是一個整數。對於每個n,我想要反轉相應的't'值。每個'id'可能有不同數量的't'值,所以需要爲每個'id'完成。 – superhero