当前位置: 首页 > 面试题库 >

根据条件获取Python Pandas中的第一行数据框

陆翰学
2023-03-14
问题内容

假设我有一个像这样的数据框

import pandas as pd
df = pd.DataFrame([[1, 2, 1], [1, 3, 2], [4, 6, 3], [4, 3, 4], [5, 4, 5]], columns=['A', 'B', 'C'])

>> df
   A  B  C
0  1  2  1
1  1  3  2
2  4  6  3
3  4  3  4
4  5  4  5

原始表更加复杂,具有更多的列和行。

我想获得满足某些条件的第一行。例子:

  1. 获取A> 3的第一行(返回第2行)
  2. 获取A> 4 AND B> 3的第一行(返回第4行)
  3. 获取第一行,其中A> 3 AND(B> 3 OR C> 2)(返回第2行)

但是,如果没有满足特定条件的行,那么我想在我按A降序排序(或者其他情况下按B,C等排序)后得到第一行

  1. 获取A> 6的第一行(按A desc的顺序返回第4行,并获取第一行)

我可以通过在数据帧上进行迭代来做到这一点(我知道那胡扯:P)。因此,我更喜欢使用pythonic方法来解决它。


问题答案:

本教程是熊猫切片的很好的教程。确保您签出。在一些片段上…要对带有条件的数据帧进行切片,请使用以下格式:

>>> df[condition]

这将返回数据框的一部分,您可以使用对其建立索引iloc。这是您的示例:

  1. 获取A> 3的第一行(返回第2行)
    >>> df[df.A > 3].iloc[0]
    

    A 4
    B 6
    C 3
    Name: 2, dtype: int64


如果您真正想要的是行号,而不是使用iloc,则为df[df.A > 3].index[0]

  1. 获取第一行,其中A> 4 AND B> 3:

    >>> df[(df.A > 4) & (df.B > 3)].iloc[0]
    

    A 5
    B 4
    C 5
    Name: 4, dtype: int64

  2. 获取第一行,其中A> 3 AND(B> 3 OR C> 2)(返回第2行)

    >>> df[(df.A > 3) & ((df.B > 3) | (df.C > 2))].iloc[0]
    

    A 4
    B 6
    C 3
    Name: 2, dtype: int64

现在,对于最后一种情况,我们可以编写一个函数来处理返回降序排列的帧的默认情况:

>>> def series_or_default(X, condition, default_col, ascending=False):
...     sliced = X[condition]
...     if sliced.shape[0] == 0:
...         return X.sort_values(default_col, ascending=ascending).iloc[0]
...     return sliced.iloc[0]
>>> 
>>> series_or_default(df, df.A > 6, 'A')
A    5
B    4
C    5
Name: 4, dtype: int64

如预期的那样,它返回第4行。



 类似资料:
  • 问题内容: 我想获取基于条件选择的数据帧行数。我尝试了以下代码。 输出: 输出显示数据帧中每一列的计数。相反,我需要获得满足以上所有条件的单一计数?这该怎么做?如果您需要有关我的数据框的更多说明,请告诉我。 问题答案: 您要的是所有条件都为真的条件,所以答案是len,除非我误解了您的要求

  • 我有以下数据帧: 我希望获得行ID,其中。 预期收益为。 有什么想法吗?

  • 嗨,伙计们,我正在使用Laravel5.5,我有两个表,用户和服务 用户表 ID 名称 电子邮件 密码 地址 城市 国家 邮政编码 null 提前谢了。热烈问候:阿卜杜拉·沙希德。

  • 我收藏了这样的文件: 我想找到所有的有效载荷。_id,其状态为真/假。预期结果是 到目前为止,我有这样的东西。 不确定如何为数组中的元素添加条件。

  • 问题内容: 当日期列的值在日期列表中时,我想从熊猫数据框中删除行。以下代码不起作用: 我收到以下错误: ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。 问题答案: 您可以使用。 将返回布尔值,具体取决于每个元素是否在列表内。然后,您可以将转换为,反之亦然。

  • 我正在通过Vuex商店中的axios从外部API获取数据,它为我提供了一个包含对象的数组——比方说——。 每个都有一个,我需要用它获取城市详细信息。我想将这个details对象作为一个新键添加到数组中。 现在我正在获取所有城市,并使用另一个Vuex操作获取城市详细信息。 所有城市的行动 获取所有城市后的变异 数组中的每个对象都有一个,我正在用它获取这个城市的详细信息。 我试图在动作中循环数组,以获