当前位置: 首页 > 知识库问答 >
问题:

基于多个条件向Python数据帧添加新列[duplicate]

邢运良
2023-03-14

我有一个数据集,包含以下各列:

贴现税合计小计productid3.98 1.06 21.06 20 3232 3.98 1.06 21.06 20 3232 3.98 6 106 100 3498 3.98 6 106 100 3743 3.98 6 106 100 3350 3.98 6 106 100 3370 46.49 3.36 66.84 63 695

现在,我需要添加一个新的column类,并根据以下条件将其赋值为01

if:
    discount > 20%
    no tax
    total > 100
then the Class will 1
otherwise it should be 0

我只在一个条件下完成了它,但我不知道如何在多个条件下完成它。

这里的wIat我已经尝试过:

df_full['Class'] = df_full['amount'].map(lambda x: 1 if x > 100 else 0)

我查看了所有其他类似的问题,但找不到解决问题的任何方法。我尝试了上述所有帖子,但仍坚持这个错误:

TypeError:'

以下是第一次发布答案的情况,我尝试过:

df_full['class'] = np.where( ( (df_full['discount'] > 20) & (df_full['tax'] == 0 ) & (df_full['total'] > 100) & df_full['productdiscount'] ) , 1, 0)

共有2个答案

楚意
2023-03-14

从您的数据图像判断,不太清楚您所说的折扣20%是什么意思。

但是,您可能可以这样做。

df['class'] = 0 # add a class column with 0 as default value

# find all rows that fulfills your conditions and set class to 1
df.loc[(df['discount'] / df['total'] > .2) & # if discount is more than .2 of total 
       (df['tax'] == 0) & # if tax is 0
       (df['total'] > 100), # if total is > 100 
       'class'] = 1 # then set class to 1

请注意

金旺
2023-03-14

可以使用DataFrame.apply跨数据框行应用任意函数。

在您的情况下,可以定义如下函数:

def conditions(s):
    if (s['discount'] > 20) or (s['tax'] == 0) or (s['total'] > 100):
        return 1
    else:
        return 0

并使用它向数据中添加新列:

df_full['Class'] = df_full.apply(conditions, axis=1)
 类似资料:
  • 基于“SC”代码,我需要将SRCTable与RefTable-1或RefTable-2连接起来 条件:如果SC为“D”,则SRCTable在KEY=KEY1上与RefTable-1连接以获得值。否则,如果SC为“U”,则SRCTable与键=键2上的RefTable-2连接 这是输入spark数据帧。 预期产出: 注意:输入表将有数百万条记录,因此需要一个优化的解决方案

  • 我有以下数据框: 我想根据以下条件对其进行过滤: 创建的角度=范围(87-92) GDT 1和GDT 2之间的距离 到目前为止我尝试了这个(最后一个方法): 此代码的输出是一个没有错误的空数据库。

  • 我有一个如下所示的数据框,我必须准备“目标列” 如果同一列下的两个单词之间有逗号,则必须按第2行所示标记两次。如果没有逗号但有空格,则必须将其视为同一个单词,即必须标记一次。另外,请注意顺序也很重要(第3行和第6行)。忽略任何内容(即没有单词,因此没有标签) 我已经使用了迭代(即使用iloc,for循环),但是它需要大量的时间,因为数据点超过200k,标签的数量也超过20个。我希望有一个有效的代码

  • 我使用文件路径解析 Spark 数据帧,但现在我想将路径与时间一起作为单独的列添加到生成的数据帧中。下面是一个当前的解决方案(pathToDF 是一个帮助器方法): 我正在尝试做这样的事情,但我不确定如何使用Column添加时间列: 实现它的更好方法是什么? 输入自由度: 当前结果: 预期结果:

  • 我有两个数据帧DF1和DF2 DF1: DF2: 我想在DF1中创建一列“image1”,并根据以下条件赋值。 检查值是否在和DF2['documentType']=='Image'中可用 因此,输出应该如下所示: 不知道如何解决这个问题,但一些想法: -加入/合并是我的第一个想法,但是如何处理这些条件呢? -可能使用检查条件的功能映射/应用

  • 我有两个数据帧df1和df2。我想根据df2列值过滤或删除df1上的行 df2,我必须检查客户名称、产品、年份、数量和金额,然后如果df1的所有值都相同,我必须放弃。(即,如果customername = Gopi,product = ball,year = 2020,qty = 0和amount,则删除 请让我知道如何实现,谢谢。 DF1: df2: 预期产出: