在Python中查找大于另一列值的列的最小值

在Python中查找大于另一列值的列的最小值,python,pandas,Python,Pandas,我在Python中工作。我有两个数据帧df1和df2: d1 = {'timestamp1': [88148 , 5617900, 5622548, 5645748, 6603950, 6666502], 'col01': [1, 2, 3, 4, 5, 6]} df1 = pd.DataFrame(d1) d2 = {'timestamp2': [5629500, 5643050, 6578800, 6583150, 6611350], 'col02': [7, 8, 9, 10, 11]

我在Python中工作。我有两个数据帧df1和df2:

d1 = {'timestamp1': [88148  , 5617900, 5622548, 5645748, 6603950, 6666502], 'col01': [1, 2, 3, 4, 5, 6]}
df1 = pd.DataFrame(d1)

d2 = {'timestamp2': [5629500, 5643050, 6578800, 6583150, 6611350], 'col02': [7, 8, 9, 10, 11], 'col03': [0, 1, 0, 0, 1]}
df2 = pd.DataFrame(d2)
我想在df1中创建一个新列,其最小时间戳df2的值大于当前df1时间戳,其中df2['col03']为零。我就是这样做的:

df1['colnew'] = np.nan
TSs = df1['timestamp1']
for TS in TSs:
values = df2['timestamp2'][(df2['timestamp2'] > TS) & (df2['col03']==0)]
    if not values.empty:
        df1.loc[df1['timestamp1'] == TS, 'colnew'] = values.iloc[0]

它可以工作,但我不想使用for循环。有更好的方法吗?

尝试一下
apply
方法

def func(x):
    values = df2['timestamp2'][(df2['timestamp2'] > x) & (df2['col03']==0)]
    if not values.empty:
        return values.iloc[0]
    else:
        np.NAN

df1["timestamp1"].apply(func)
您可以创建一个单独的函数来执行必须执行的操作。 输出是您的新列

0    5629500.0
1    5629500.0
2    5629500.0
3    6578800.0
4          NaN
5          NaN
Name: timestamp1, dtype: float64

这不是一个单行解决方案,但它有助于保持事情的有序性。

使用
pandas。将
与前进方向合并

pd.merge_asof(
    df1, df2.loc[df2.col03 == 0, ['timestamp2']],
    left_on='timestamp1', right_on='timestamp2', direction='forward'
).rename(columns=dict(timestamp2='colnew'))

   col01  timestamp1     colnew
0      1       88148  5629500.0
1      2     5617900  5629500.0
2      3     5622548  5629500.0
3      4     5645748  6578800.0
4      5     6603950        NaN
5      6     6666502        NaN
你试过searchsorted()吗?读一下