【发布时间】:2018-08-24 03:32:36
【问题描述】:
我有一个带有列的数据框:
-
diff- 注册日期和付款日期之间的差异,以天为单位 -
country- 用户所在国家/地区 user_id-
campaign_id-- 另一个分类列,我们将在 groupby 中使用它
我需要为每个拥有diffcountry+campaign_id 组计算不同用户的数量。
例如,对于country'A'、campaign'abc'和diff7,我需要从country'A'、campaign'abc'和diff中获取不同的用户数 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 pandas pandas-groupby