首页 > 解决方案 > 使用系列作为输入,如何在 pandas 数据框中找到具有匹配值的行?例如 df.loc[系列]?

问题描述

我有一个 DataFramedf和一个sdf. 我想找到其中所有df具有相同值的行s。我可能应该提到,列可以更改,但s始终是df.

df = pd.DataFrame.from_dict({'a': {0: 0.015, 1: 0.02, 2: 0.025, 3: 0.015},
 'b': {0: True, 1: True, 2: True, 3: True},
 'c': {0: 'foo', 1: 'foo', 2: 'foo', 3: 'foo'},
 'd': {0: 1, 1: 1, 2: 1, 3: 1}})
s = df.loc[0]

在这种情况下,预期的结果将是 的返回值df.loc[[0,3]]。或者,匹配行的索引也可以。

当然,如果列每次都相同,df.loc[df['a']==s['a'], df['b']==s['b'], ...]那就可以了。也许有一种df.loc[ ]通过某种理解来生成术语的方法?

我在想象必须有一种 pythonic/pandas 的方式来做到这一点。

标签: pythonpandasdataframe

解决方案


比较行DataFrame.eq,然后测试True每行是否所有 sDataFrame.all和最后一个过滤器boolean indexing

df = df[df.eq(s).all(axis=1)]
print (df)
       a     b    c  d
0  0.015  True  foo  1
3  0.015  True  foo  1

详情

print (df.eq(s))
       a     b     c     d
0   True  True  True  True
1  False  True  True  True
2  False  True  True  True
3   True  True  True  True

print (df.eq(s).all(axis=1))
0     True
1    False
2    False
3     True
dtype: bool

推荐阅读