python中的unique_python-在熊猫中为groupby计算nunique()

我有一个带有列的数据框:

> diff-注册日期和付款日期之间的差额,以天为单位

>国家-用户的国家

> user_id

> campaign_id-另一个分类列,我们将在groupby中使用它

我需要为每个国家(包括diff< = n)的campaign_id组计算不同的用户数.

例如,对于国家“ A”,广告系列“ abc”和差异7,我需要获得与国家“ A”,广告系列“ abc”和差异< = 7不同的用户

我当前的解决方案(如下)工作时间过长

import pandas as pd

import numpy as np

## generate test dataframe

df = pd.DataFrame({

'country':np.random.choice(['A', 'B', 'C', 'D'], 10000),

'campaign': np.random.choice(['camp1', 'camp2', 'camp3', 'camp4', 'camp5', 'camp6'], 10000),

'diff':np.random.choice(range(10), 10000),

'user_id': np.random.choice(range(1000), 10000)

})

## main

result_df = pd.DataFrame()

for diff in df['diff'].unique():

tmp_df = df.loc[df['diff']<=diff,:]

tmp_df = tmp_df.groupby(['country', 'campaign'], as_index=False).apply(lambda x: x.user_id.nunique()).reset_index()

tmp_df['diff'] = diff

tmp_df.columns=['country', 'campaign', 'unique_ppl', 'diff']

result_df = pd.concat([result_df, tmp_df],ignore_index=True, axis=0)

也许有更好的方法可以做到这一点?

你可能感兴趣的:(python中的unique)