【问题标题】:How to search for a row entry in a pandas DataFrame?如何在 pandas DataFrame 中搜索行条目?
【发布时间】:2021-07-17 07:09:01
【问题描述】:

你知道如何在 pandas DataFrame 中搜索行数据条目吗?理想情况下,在数据框中搜索部分行条目。

就像我有一个行条目一样:

row_entry = ['ven', 'lar', 'cin', 'por']

还有一个数据框 rows_df:

rows_df =
             value1        value2       value3       value4      value5
14              foo           fir          tar          har    0.110000
15              bar           der          ars           go    0.510000
16              gal           der          ben          den    0.310000
17              ven           lar          cin          por    0.140000
18               go           bun          por         fran    0.560000

第 17 行将被选中。这无需使用一系列 if 子句。

result = 
             value1        value2       value3       value4      value5
17              ven           lar          cin          por    0.140000

我尝试过的(并且有效)是:

rows_df[(rows_df['value1'] == 'ven') 
      & (rows_df['value2'] == 'lar')
      & (rows_df['value3'] == 'cin')
      & (rows_df['value4'] == 'por')]

理想情况下,我不需要指定哪些是列名,或者指定值的顺序。我正在考虑类似.isin() 子句的内容,但使用的是每一行而不是列。

就像(不起作用):

df.loc[df.isin(some_values, axis=1)]

还查看了 ilocloc 函数,但也许我失去了一些东西。

谢谢!

【问题讨论】:

    标签: python pandas dataframe rows data-manipulation


    【解决方案1】:
    import numpy as np
    df[np.isin(df, ['ven', 'lar', 'cin', 'por']).all(axis = 1)]
    

    【讨论】:

    • 当不同列中的值不相关时,这种方法可以更灵活地确定row_entrydf[np.isin(df, ['cin', 'lar', 'por', 'ven']).all(axis=1)] 给你同样的结果。
    • 当我设置要比较的列时,它对我有用。它应该发生吗? rows_df[np.isin(rows_df[rows_df.columns[:4]], row_entry).all(axis = 1)]
    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2018-04-24
    • 2013-06-10
    • 2020-02-13
    相关资源
    最近更新 更多