如何提高熊猫数据的转换效率?

时间:2019-12-17 18:46:59

标签: python pandas

我需要基于一个唯一的用户ID创建一个具有各种摘要列的新数据框。作为一个简单的例子,我有这样的东西:

df = pd.DataFrame({
    'date': [date(2019,10,1), date(2019,10,2), date(2019,10,2), date(2019,10,4)],
    'user': ['bob', 'bob', 'sally', 'bob']
})

我需要转换成这样的数据框,该数据框具有我们看到用户和第一次看到他们的总天数:

df_new = pd.DataFrame({
    'user': ['bob', 'sally'],
    'first_date': [date(2019,10,1), date(2019,10,2)],
    'total_days': [3, 1]
})

我正在做的是基于排序和数据透视表创建临时数据帧,然后合并在一起以形成一个最终的大数据帧(在我的真实数据集中,我们有大约15列,所以我要做很多!)。我的代码如下所示:

df = pd.DataFrame({
    'date': [date(2019,10,1), date(2019,10,2), date(2019,10,2), date(2019,10,4)],
    'user': ['bob', 'bob', 'sally', 'bob']
})

df_new = df.copy()
df_new = df_new.sort_values('date', ascending=True).drop_duplicates(['user']).reset_index(drop=True)
df_new.rename(columns={'date' : 'first_date'}, inplace=True)

df_count = pd.pivot_table(df, values=['date'], index=['user'], aggfunc='count')
df_count.rename(columns={'date' : 'total_days'}, inplace=True)

df_new = pd.merge(df_count, df_new, how='left', on='user')

可以,但是我敢肯定有更有效的方法可以做到这一点。请帮忙!

0 个答案:

没有答案