根据pandas中列中的有序值从DataFrame中选择行

时间:2017-04-04 17:19:26

标签: python pandas dataframe

在列值的基础上选择pandas数据帧行的问题在:

中讨论

Select rows from a DataFrame based on values in a column in pandas

不考虑基于列值顺序的行的排序。

举个例子,考虑一下:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
               'B': 'one one two three two two one three'.split(),
               'C': np.arange(8), 'D': np.arange(8) * 2})
print(df.loc[df['D'].isin([0,2])])

的产率:

     A    B  C  D
0  foo  one  0  0
1  bar  one  1  2

同样如下:

print(df.loc[df['D'].isin([2,0])])

其中列值的顺序已反转。

我想知道如何修改此表达式以尊重所需列值的顺序,以便输出为:

     A    B  C  D
1  bar  one  1  2
0  foo  one  0  0

2 个答案:

答案 0 :(得分:1)

您可以将值放在数据框中,然后执行内连接(默认情况下合并),左边数据框应该preserve the order

D = pd.DataFrame({"D": [2, 0]})
D.merge(df)

#   D     A   B C
#0  2   bar one 1
#1  0   foo one 0

或者更确定的方法:

D.reset_index().merge(df).sort_values("index").drop("index", 1)
#   D     A   B C
#0  2   bar one 1
#1  0   foo one 0

答案 1 :(得分:0)

df.loc[df['D'].isin([2,0])].sort_values(by='A')

其中'A'可以是任何列,而升序= False你想要反向订单。