在列值的基础上选择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
答案 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你想要反向订单。