Nil*_*ils 4 python dataframe pandas
我尝试使用列表理解和 if 语句向 DataFrame 添加一个新列,如下所示:
\n\nSD[\'Ln(aT) ANALYTIC\'] = [x + 1 for x in SD[\'T\'] if SD[\'T\'] >= SD[\'TG\']]\nRun 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().\nRun Code Online (Sandbox Code Playgroud)\n\n我不知道如何处理这个问题。
\n\n有什么建议么?
\n\n编辑:数据框看起来像:
\n\n\nnumpy.where与布尔掩码一起使用:
mask = SD[\'T\'] >= SD[\'TG\']\nSD[\'Ln(aT) ANALYTIC\'] = np.where(mask, SD[\'T\'] + 1, SD[\'T\'])\nRun Code Online (Sandbox Code Playgroud)\n\n或者:
\n\nSD[\'Ln(aT) ANALYTIC\'] = np.where(mask, SD[\'T\'] + 1, np.nan)\nRun Code Online (Sandbox Code Playgroud)\n\n列表理解是可能的,但速度很慢:
\n\nSD[\'Ln(aT) ANALYTIC1\'] = [i + 1 if i >= j else i for i, j in zip(SD[\'T\'], SD[\'TG\'])]\nRun Code Online (Sandbox Code Playgroud)\n\nSD = 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)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
9879 次 |
| 最近记录: |