繁体   English   中英

使用系列作为输入,如何在 Pandas 数据框中找到具有匹配值的行? 例如df.loc[系列]?

[英]Using a series as input, how can I find rows with matching values in a pandas dataframe? e.g. df.loc[series]?

我有一个数据帧df等一系列s匹配列df 我想在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 方式来做到这一点。

通过比较行DataFrame.eq ,然后测试,如果一切True每行S按DataFrame.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM