按列表过滤熊猫数据框

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 是你的dataframelst 是我们的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), : ]

这样你只能得到路口

【讨论】:

以上是关于按列表过滤熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何按字符串过滤熊猫数据框?

熊猫数据框 - 按字符串过滤/选择列是不是保留顺序?

根据字符串列表过滤熊猫中的数据框

当列数据类型为列表时如何过滤熊猫数据框

如何按月份和年份输入过滤具有日期时间索引的数据框?熊猫

按时间戳列过滤/选择熊猫数据帧的行