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