【问题标题】:How to create a new column with multiple values in python dataframe using for loop?如何使用for循环在python数据框中创建一个具有多个值的新列?
【发布时间】:2021-11-24 02:03:09
【问题描述】:

我想创建一个带有 for 循环的函数,该循环遍历一个小数据框,并根据设置的条件添加一个具有不同值的新列。

我已经尝试了以下方法,但它为所有行返回了我的第一个 if 语句的输出(它为每一行打印“Top Buyers”):

def CustomerSegmentClassifier(df):
    
    for i, row in df.iterrows():
        if (df['Recency'] <= 200).any() or (df['Frequency'] >= 20).any():
            df.at[i,'Cluster Name'] = 'Top Buyers'
        elif (df['Recency'].between(201, 750)).any() or (df['Frequency'].between(5,19)).any():
            df.at[i,'Cluster Name'] = 'Casual Buyers'
        else:
            df.at[i,'Cluster Name'] = 'Churned Buyers'
    return df

Image of Output from CustomerSegmentClassifer Function

任何帮助将不胜感激。

【问题讨论】:

  • 澄清一下,你用的是熊猫吗?

标签: python dataframe for-loop if-statement


【解决方案1】:

对于向量化方法,避免跨行的 for 循环。与使用列表和字典的通用 Python 不同,pandas 和 numpy 对于数组和序列的条件逻辑有多种解决方案。

具体来说,根据您的需要考虑numpy.select,甚至使用系列运算符进行不等式逻辑:

def CustomerSegmentClassifier(df): 
    conditions = [
        ((df['Recency'].le(200)) | (df['Frequency'].ge(20))),
        (
          (df['Recency'].between(201, 750)) |
          (df['Frequency'].between(5, 19))
        )
    ]

    values = ['Top Buyers', 'Casual Buyers']

    df['Cluster Name'] = np.select(
        conditions, values, default='Churned Buyers'
    )
    
    return df 

【讨论】:

  • 很高兴为您提供帮助!但请注意 非常 重要的注意事项,即避免在 pandas 中应避免的逐行循环。
【解决方案2】:

这是我尝试解决您的问题:

import pandas as pd
#df = pd.read_csv('test_data.txt', sep=',', header=None)
#df.columns = ['Customer ID','Recency','Frequency','Monetary Value']

def CustomerSegmentClassifier(df):
    for i, row in df.iterrows():
        if (df['Recency'][i] <= 200) or (df['Frequency'][i] >= 20):
            df.at[i,'Cluster Name'] = 'Top Buyers'
        elif (200 > df['Recency'][i] <= 750) or (5 > df['Frequency'][i] < 20):
            df.at[i,'Cluster Name'] = 'Casual Buyers'
        else:
            df.at[i,'Cluster Name'] = 'Churned Buyers'
    return df

CustomerSegmentClassifier(df)

输出:

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2023-04-08
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    相关资源
    最近更新 更多