python - 根据标准获取 Python Pandas 中的第一行数据框

标签 python pandas

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

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的方式来解决它。

最佳答案

This tutorial非常适合 Pandas 切片。确保你检查出来。在一些片段上...要使用条件对数据框进行切片,请使用以下格式:

>>> 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 行。

关于python - 根据标准获取 Python Pandas 中的第一行数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40660088/

相关文章:

python - 是否有用于临时更改 matplotlib 设置的上下文管理器?

python - 将复杂的 str 更改为 pandas Dataframe 中的 float

python - 从固定宽度列转换为 csv

python:行连接 2 个数据帧,将它们的名称保留为新列

python - 简单用例的闭包

python - 从 Pandas Dataframe 中条件提取数据

python - 根据另一个数据帧中的匹配 id 替换数据帧列值

python - 使用 python Flask 和 NodeJS 的 Websocket (socket.io) 代理

python - 是否有用于为 'patsy' 指定 "baseline"模型的 'statsmodels' 公式语法

python - 我可以更改 Tkinter 中的标题栏吗?