我有一个Python熊猫数据框架rpt:

rpt
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 47518 entries, ('000002', '20120331') to ('603366', '20091231')
Data columns:
STK_ID                    47518  non-null values
STK_Name                  47518  non-null values
RPT_Date                  47518  non-null values
sales                     47518  non-null values

我可以像这样过滤股票id为'600809'的行:rpt[rpt['STK_ID'] == '600809']

<class 'pandas.core.frame.DataFrame'>
MultiIndex: 25 entries, ('600809', '20120331') to ('600809', '20060331')
Data columns:
STK_ID                    25  non-null values
STK_Name                  25  non-null values
RPT_Date                  25  non-null values
sales                     25  non-null values

我想把一些股票的所有行放在一起,例如['600809','600141','600329']。这意味着我想要一个这样的语法:

stk_list = ['600809','600141','600329']

rst = rpt[rpt['STK_ID'] in stk_list] # this does not works in pandas 

既然熊猫不接受上述命令,如何实现目标呢?


当前回答

你也可以使用'query'和@来达到类似的效果:

eg:

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'f']})
df = pd.DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3, 5]})
list_of_values = [3,6]
result= df.query("A in @list_of_values")
result
   A  B
1  6  2
2  3  3

其他回答

你可以使用查询,即:

b = df.query('a > 1 & a < 5')

使用isin方法:

rpt [rpt[‘STK_ID] isin (stk_list)]。

您还可以直接查询您的DataFrame以获得此信息。

rpt.query('STK_ID in (600809,600141,600329)')

或者类似地搜索范围:

rpt.query('60000 < STK_ID < 70000')

你也可以使用'query'和@来达到类似的效果:

eg:

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'f']})
df = pd.DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3, 5]})
list_of_values = [3,6]
result= df.query("A in @list_of_values")
result
   A  B
1  6  2
2  3  3

你还可以使用以下命令来使用range:

b = df[(df['a'] > 1) & (df['a'] < 5)]