【问题标题】:How to find min value of another column greater than current column Pandas如何找到大于当前列 Pandas 的另一列的最小值
【发布时间】:2016-12-30 12:35:46
【问题描述】:

我确信这很容易,但是如何找到大于当前列中的值的列的最小值?另外,如何找到小于当前列值的列的最大值?

from io import StringIO
import io

text = """Order   starttime               endtime
1       2016-03-01 14:31:10.777  2016-03-01 14:31:10.803
1       2016-03-01 14:31:10.779  2016-03-01 14:31:10.780
1       2016-03-01 14:31:10.790  2016-03-01 14:31:10.791
1       2016-03-01 14:31:10.806  2016-03-01 14:31:10.863"""

df = pd.read_csv(StringIO(text), sep='\s{2,}', engine='python', parse_dates=[1, 2])

所以.. 例子.. 对于 endtime 列,我想要大于该值的 starttime 列的最小值。

与当时结束时间 2016-03-01 14:31:10.803 关联的值(第一个值) 那么将是 2016-03-01 14:31:10.806(startdatetime 的最后一个值)。

与 2016-03-01 14:31:10.780(第二个结束时间)关联的值应该是 2016-03-01 14:31:10.790

所以基本上(在伪代码中)

df['nexttime'] = min(df['starttime'])>df['endtime']

不胜感激。我敢肯定,对于比我更熟练的人来说,这很容易

【问题讨论】:

    标签: python pandas dataframe aggregate min


    【解决方案1】:

    你可以试试这样的:

    df.endtime.apply(lambda x: min(df.starttime[df.starttime > x]) if len(df.starttime[df.starttime > x]) != 0 else np.nan)
    
    # 0   2016-03-01 14:31:10.806
    # 1   2016-03-01 14:31:10.790
    # 2   2016-03-01 14:31:10.806
    # 3                       NaT
    # Name: endtime, dtype: datetime64[ns]
    

    或者更有效的方式:

    def findMin(x):
        larger = df.starttime[df.starttime > x]
        if len(larger) != 0:
            return min(larger)
        else:
            return np.nan
    
    df.endtime.apply(findMin)
    
    # 0   2016-03-01 14:31:10.806
    # 1   2016-03-01 14:31:10.790
    # 2   2016-03-01 14:31:10.806
    # 3                       NaT
    # Name: endtime, dtype: datetime64[ns]
    

    可能有一种方法可以避免矢量扫描,但如果性能不是大问题,这可行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多