Pandas new Column 具有列表理解和引用现有列的 if 语句

Nil*_*ils 4 python dataframe pandas

我尝试使用列表理解和 if 语句向 DataFrame 添加一个新列,如下所示:

\n\n
SD[\'Ln(aT) ANALYTIC\'] = [x + 1 for x in SD[\'T\'] if SD[\'T\'] >= SD[\'TG\']]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到此错误:

\n\n
 The truth value of a Series is ambiguous. Use a.empty, \n a.bool(), a.item(), a.any() or a.all().\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不知道如何处理这个问题。

\n\n

有什么建议么?

\n\n

编辑:数据框看起来像:

\n\n

在此输入图像描述

\n

jez*_*ael 5

numpy.where与布尔掩码一起使用:

\n\n
mask = SD[\'T\'] >= SD[\'TG\']\nSD[\'Ln(aT) ANALYTIC\'] = np.where(mask, SD[\'T\'] + 1, SD[\'T\'])\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者:

\n\n
SD[\'Ln(aT) ANALYTIC\'] = np.where(mask, SD[\'T\'] + 1, np.nan)\n
Run Code Online (Sandbox Code Playgroud)\n\n

列表理解是可能的,但速度很慢:

\n\n
SD[\'Ln(aT) ANALYTIC1\'] = [i + 1 if i >= j else i for i, j in zip(SD[\'T\'], SD[\'TG\'])]\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
SD = pd.DataFrame({\'T\': [1,2,3],\n                   \'TG\':[2,5,1]})\n\n#[3000 rows x 2 columns]\nSD = pd.concat([SD] * 1000, ignore_index=True)\n\n\nIn [294]: %timeit SD[\'Ln(aT) ANALYTIC1\'] = [i + 1 if i >= j else i for i, j in zip(SD[\'T\'], SD[\'TG\'])]\n1.18 ms \xc2\xb1 82.6 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000 loops each)\n\nIn [295]: %timeit SD[\'Ln(aT) ANALYTIC2\'] = np.where(SD[\'T\'] >= SD[\'TG\'], SD[\'T\'] + 1, SD[\'T\'])\n511 \xc2\xb5s \xc2\xb1 16.8 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000 loops each)\n
Run Code Online (Sandbox Code Playgroud)\n