按列表过滤熊猫数据框
Posted
技术标签:
【中文标题】按列表过滤熊猫数据框【英文标题】:Filter pandas dataframe by list 【发布时间】:2017-12-15 20:33:19 【问题描述】:我有一个数据框,其中有一行名为“Hybridization REF”。我想进行过滤,以便仅获取与列表中的一项具有相同标签的项的数据。
基本上,我想做以下事情:
dataframe[dataframe["Hybridization REF"].apply(lambda: x in list)]
但是那个语法不正确。
【问题讨论】:
【参考方案1】:假设
df
是你的dataframe
,
lst
是我们的list
标签。
df.loc[ df.index.isin(lst), : ]
将显示其索引与列表项的任何值匹配的所有行。我希望这有助于解决您的问题。
【讨论】:
【参考方案2】:有 numpy 数据框吗?我猜这是熊猫数据框,如果是这样,这就是解决方案。
df[df['Hybridization REF'].isin(list)]
【讨论】:
这个过滤器有效,我更喜欢这种方式。您可以通过这种方式阅读文档how to filtering dataframe。【参考方案3】:使用重新索引更新,
df.reindex(collist, axis=1)
和
df.reindex(rowlist, axis=0)
两者都有:
df.reindex(index=rowlist, columns=collist)
您可以使用 .loc 或列过滤:
df = pd.DataFrame(data=np.random.rand(5,5),columns=list('ABCDE'),index=list('abcde'))
df
A B C D E
a 0.460537 0.174788 0.167554 0.298469 0.630961
b 0.728094 0.275326 0.405864 0.302588 0.624046
c 0.953253 0.682038 0.802147 0.105888 0.089966
d 0.122748 0.954955 0.766184 0.410876 0.527166
e 0.227185 0.449025 0.703912 0.617826 0.037297
collist = ['B','D','E']
rowlist = ['a','c']
获取列表中的列:
df[collist]
输出:
B D E
a 0.174788 0.298469 0.630961
b 0.275326 0.302588 0.624046
c 0.682038 0.105888 0.089966
d 0.954955 0.410876 0.527166
e 0.449025 0.617826 0.037297
获取列表中的行
df.loc[rowlist]
A B C D E
a 0.460537 0.174788 0.167554 0.298469 0.630961
c 0.953253 0.682038 0.802147 0.105888 0.089966
【讨论】:
【参考方案4】:您可以尝试以下方法:
df.loc[ df.index.intersection(lst), : ]
这样你只能得到路口
【讨论】:
以上是关于按列表过滤熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章