猿问

如果列中的值位于值的集合列表[重复]中,则筛选数据行

如果列中的值位于值的集合列表[重复]中,则筛选数据行

我有一只Python熊猫DataFramerpt:

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

既然熊猫不接受上面的命令,如何达到目标?


撒科打诨
浏览 420回答 3
3回答

元芳怎么了

使用isin方法。rpt[rpt['STK_ID'].isin(stk_list)].

料青山看我应如是

isin()如果有精确匹配的列表,但如果要查找部分匹配或子字符串列表,则可以使用str.contains方法和正则表达式。例如,如果我们想返回DataFrame,那么所有以'600'然后是任何三个数字:>>>&nbsp;rpt[rpt['STK_ID'].str.contains(r'^600[0-9]{3}$')]&nbsp;#&nbsp;^&nbsp;means&nbsp;start&nbsp;of&nbsp;string...&nbsp;&nbsp;&nbsp;STK_ID&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;[0-9]{3}&nbsp;means&nbsp;any&nbsp;three&nbsp;digits...&nbsp;&nbsp;'600809'&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;$&nbsp;means&nbsp;end&nbsp;of&nbsp;string...&nbsp;&nbsp;'600141'&nbsp;&nbsp;......&nbsp;&nbsp;'600329'&nbsp;&nbsp;......&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;...假设现在我们有一个字符串列表,我们希望在'STK_ID'以结束,例如。endstrings&nbsp;=&nbsp;['01$',&nbsp;'02$',&nbsp;'05$']我们可以用regex‘或’字符连接这些字符串。|并将字符串传递给str.contains若要筛选DataFrame,请执行以下操作:>>>&nbsp;rpt[rpt['STK_ID'].str.contains('|'.join(endstrings)]...&nbsp;&nbsp;&nbsp;STK_ID&nbsp;&nbsp;&nbsp;......&nbsp;&nbsp;'155905'&nbsp;&nbsp;......&nbsp;&nbsp;'633101'&nbsp;&nbsp;......&nbsp; &nbsp;'210302'&nbsp;&nbsp;......&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;...最后,contains可以忽略大小写(通过设置case=False),允许您在指定要匹配的字符串时具有更大的通用性。例如,str.contains('pandas',&nbsp;case=False)相配PANDAS,&nbsp;PanDAs,&nbsp;paNdAs123等等。
随时随地看视频慕课网APP

相关分类

Python
我要回答