如何找到大于当前列 Pandas 的另一列的最小值
How to find min value of another column greater than current column Pandas
我相信这很简单,但是如何找到大于当前列中值的列的最小值?另外,如何找到小于当前列值的列的最大值?
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])
所以..例子..
对于结束时间列,我想要大于该值的开始时间列的最小值。
Then endtime 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']
非常感谢任何帮助..我相信对于比我更熟练的人来说这很容易
您可以尝试这样的操作:
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]
可能有一种方法可以避免矢量扫描,但如果性能不是大问题,这种方法可行。
我相信这很简单,但是如何找到大于当前列中值的列的最小值?另外,如何找到小于当前列值的列的最大值?
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])
所以..例子.. 对于结束时间列,我想要大于该值的开始时间列的最小值。
Then endtime 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']
非常感谢任何帮助..我相信对于比我更熟练的人来说这很容易
您可以尝试这样的操作:
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]
可能有一种方法可以避免矢量扫描,但如果性能不是大问题,这种方法可行。