如何根据条件在数据框中移动一行

时间:2019-08-27 07:28:29

标签: python python-3.x pandas dataframe

请考虑下表:

              date       mainMode       freq
  7     1560327222            CAR          3
165     1560327508        WALKING          1
 28     1560327306            CAR          1
 35     1560326894            CAR          1
184     1560327408            CAR          2

我想使freq列的表以降序排列,但是第一行必须始终是基于date列的最新行。想法是将最新的文件移到第一行,而不是复制它或插入相同的重复文件,而是将其移到第一位置,避免重复。

预期结果将是:

              date       mainMode       freq
 35     1560326894            CAR          1
  7     1560327222            CAR          3
184     1560327408            CAR          2
165     1560327508        WALKING          1
 28     1560327306            CAR          1

编辑

目标是基于freq对表进行排序,然后获取最新记录(单行)并将其移至数据框的第一行位置,而不进行重复。我希望这有助于理解问题。

非常感谢您

2 个答案:

答案 0 :(得分:1)

使用concat并选择带有最小值的第一个值,然后使用sort_values选择所有其他行:

#select all rows with min date
m = df['date'] == df['date'].min()

df = pd.concat([df[m], df[~m].sort_values('freq', ascending=False)])
print (df)
           date mainMode  freq
35   1560326894      CAR     1
7    1560327222      CAR     3
184  1560327408      CAR     2
165  1560327508  WALKING     1
28   1560327306      CAR     1

或者:

#select index value by first minimal date
i = df['date'].idxmin()

df = pd.concat([df.loc[[i]], df[df.index != i].sort_values('freq', ascending=False)])
print (df)
           date mainMode  freq
35   1560326894      CAR     1
7    1560327222      CAR     3
184  1560327408      CAR     2
165  1560327508  WALKING     1
28   1560327306      CAR     1

答案 1 :(得分:0)

我不确定这是否是您想要的。

df.sort_values(by='freq',ascending=False,inplace=True)