【问题标题】:Applying a custom function to a dataframe将自定义函数应用于数据框
【发布时间】:2023-03-06 19:12:01
【问题描述】:

我一直在为一个问题苦苦挣扎。实际上,我想在我的数据框中创建一个新列,对于低于某个范围的 3 列的值将给出 0,对于超过阈值的值给出 1。我附上了我的数据头的图像。在我的数据中,如果 Ir、Iy 和 Ib 的值高于 4,则为 1,否则为 0。 提前致谢!

【问题讨论】:

  • 添加一点数据(不是图像格式)并写出你想要的输出。
  • 欢迎来到 SO!请阅读我如何提出一个好的问题? stackoverflow.com/help/how-to-ask

标签: python pandas lambda data-science apply


【解决方案1】:

试试这个:

import numpy as np

df['new_col'] = np.where(((df['lr'] > 4) & (df['ly'] > 4) & (df['lb'] > 4)), 1, 0)

【讨论】:

  • 为什么不np.where(df[['lr', 'ly', 'lb']].gt(4).all(axis=1), 1, 0)
  • 或简称:df[['lr', 'ly', 'lb']].gt(4).all(axis=1).astype(int)
【解决方案2】:

这里有一个例子: 如果 lr > 0.5 并且 ly > 0.4 并且 lb > 0.3

import random
import pandas as pd
data = {'lr': [],
        'ly': [],
        'lb': []
       }

for i in range(20):
    r = random.random()
    y = random.random()
    b = random.random()
    data['lr'].append(r)
    data['ly'].append(y)
    data['lb'].append(b)

data

df = pd.DataFrame(data)
df['new_column'] = 0

filt = (df['lr'] > 0.5) & (df['ly'] > 0.4) & (df['lb'] > 0.3)

df.loc[filt, 'new_column'] = 1
df

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 2020-10-28
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2018-12-20
    • 2018-03-03
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多