Python “熊猫”数据框的功能工程多列(基于现有列添加新列)

Python “熊猫”数据框的功能工程多列(基于现有列添加新列),python,pandas,feature-extraction,Python,Pandas,Feature Extraction,对不起,我太天真了。我有以下数据,我想设计一些列。但我不知道如何在同一数据帧上执行多个操作。需要指出的是,我为每个客户提供了多个条目。因此,最后,我需要聚合值(即每个客户1个条目) 基于最小值、计数和平均值的新列 预期结果 一个解决方案: 我可以为每个需要的列想出3个单独的操作,然后将所有这些操作合并以获得一个新的数据帧。我知道为了我所需要的,这是没有效率的 df_1 = customer_purchases.groupby('customer_id', sort = False)["

对不起,我太天真了。我有以下数据,我想设计一些列。但我不知道如何在同一数据帧上执行多个操作。需要指出的是,我为每个客户提供了多个条目。因此,最后,我需要聚合值(即每个客户1个条目)

基于最小值、计数和平均值的新列 预期结果 一个解决方案:

我可以为每个需要的列想出3个单独的操作,然后将所有这些操作合并以获得一个新的数据帧。我知道为了我所需要的,这是没有效率的

df_1 = customer_purchases.groupby('customer_id', sort = False)["purchase_amount"].min().reset_index(name ='amount')

df_2 = customer_purchases.groupby('customer_id', sort = False)["days_since"].count().reset_index(name ='frequency')

df_3 = customer_purchases.groupby('customer_id', sort = False)["days_since"].mean().reset_index(name ='recency')
然而,要么我得到一个错误,要么我没有得到正确数据的数据帧。 我们将感谢您的帮助和耐心。

请改用

 customer_purchases.groupby('customer_id')['purchase_amount'].transform(lambda x : x.min()) 
Transform将为原始数据帧的每一行提供输出,而不是使用agg解决方案时的分组行 最后我找到了解决办法

def f(x):
        recency        = x['days_since'].min()
        frequency      = x['days_since'].count()
        monetary_value = x['purchase_amount'].mean()
        c = ['recency','frequency, monetary_value']
        return pd.Series([recency, frequency, monetary_value], index =c )
    
    df1 = customer_purchases.groupby('customer_id').apply(f)
    print (df1)

请包含预期的输出。请为同一用户输入多个条目。因此,我想为每个用户排序聚合。因此,我应该为每个客户获得一个条目。New_df['amount']=customer_purchases.groupby(['customer_id'])['purchase_amount'].min(),对于count,请使用count(),不要忘记为新df重置索引
df_1 = customer_purchases.groupby('customer_id', sort = False)["purchase_amount"].min().reset_index(name ='amount')

df_2 = customer_purchases.groupby('customer_id', sort = False)["days_since"].count().reset_index(name ='frequency')

df_3 = customer_purchases.groupby('customer_id', sort = False)["days_since"].mean().reset_index(name ='recency')
 customer_purchases.groupby('customer_id')['purchase_amount'].transform(lambda x : x.min()) 
def f(x):
        recency        = x['days_since'].min()
        frequency      = x['days_since'].count()
        monetary_value = x['purchase_amount'].mean()
        c = ['recency','frequency, monetary_value']
        return pd.Series([recency, frequency, monetary_value], index =c )
    
    df1 = customer_purchases.groupby('customer_id').apply(f)
    print (df1)