Python 如果A列中有1,则使用同一行中B列的值

Python 如果A列中有1,则使用同一行中B列的值,python,pandas,lambda,dataframe,Python,Pandas,Lambda,Dataframe,我有两列,BinaryCol,正如您可能猜到的,它是0s和1s,以及OnsetTime,范围从0到294。我想创建一个新列,该列仅包含OnsetTime值,用于BinaryCol=1的行 我目前有: df['Test'] = df['BinaryCol'].apply(lambda row: ['OnsetTime'] if row['BinaryCol'] > 0 else 0, axis=1) 但是它不起作用。您可以使用numpy的where: df['Test'] = np.whe

我有两列,
BinaryCol
,正如您可能猜到的,它是0s和1s,以及
OnsetTime
,范围从0到294。我想创建一个新列,该列仅包含
OnsetTime
值,用于
BinaryCol
=1的行

我目前有:

df['Test'] = df['BinaryCol'].apply(lambda row: ['OnsetTime'] if row['BinaryCol'] > 0 else 0, axis=1)

但是它不起作用。

您可以使用
numpy
where

df['Test'] = np.where(df['BinaryCol'], df['OnsetTime'], np.NaN)

df['BinaryCol']
是条件,
df['OnsetTime']
是条件为
True
时的值,
np.NaN
是条件为
False
时的值

您可以使用
numpy
's
其中
:

df['Test'] = np.where(df['BinaryCol'], df['OnsetTime'], np.NaN)

df['BinaryCol']
是条件,
df['OnsetTime']
是条件为
True
时的值,
np.NaN
是条件为
False
时的值,只需做两列的乘积即可

df['Test'] = df['OnsetTime'] * df['BinaryCol']

只需做两列的乘积

df['Test'] = df['OnsetTime'] * df['BinaryCol']

您需要将函数应用于数据帧,而不是系列

    df['Test'] = df.apply(lambda row: (row['OnsetTime'] if row['BinaryCol'] == 1 else 0), axis = 1)

您需要将函数应用于数据帧,而不是系列

    df['Test'] = df.apply(lambda row: (row['OnsetTime'] if row['BinaryCol'] == 1 else 0), axis = 1)