首页 > 解决方案 > 如何为每个用户 ID 重复一组日期?

问题描述

我有 pd.merge 的问题。我有以下数据

from pandas import DataFrame
clients = {'DATE': [20150430,20150531,20150630,20150331,20150430],
'CLIENT_ID': [1,1,1,2,2],
'VALUE' : [145,202,150,175,180]}
dates = {'DATE' : [20150331,20150430,20150531,20150630,20150731]}
df1 = DataFrame(clients,columns= ['DATE', 'CLIENT_ID','VALUE'])
df2 = DataFrame(dates,columns=['DATE'])

DF1 DF2

我希望为每个客户重复所有日期,如下所示:

results = {'DATE': [20150331,20150430,20150531,20150630,20150731,20150331,20150430,20150531,20150630,20150731],
'CLIENT_ID': [1,1,1,1,1,2,2,2,2,2],
'VALUE': [None,145,202,150,None,175,180,None,None,None]}
df_results = DataFrame(results,columns= ['DATE', 'CLIENT_ID','VALUE'])

DF_RESULT

我试过这个,但结果不是我们想要的

pd.merge(df1, df2, on='DATE', how='outer')

合并

谢谢您的帮助。

标签: pythonpandasmerge

解决方案


不知道为什么你需要 df1,你可以从 df2 创建它,我认为,这是方法reindex

df1.groupby('CLIENT_ID').apply(lambda  x : x.set_index('DATE').reindex(df2.DATE).ffill().bfill()).reset_index(level=1)
               DATE  CLIENT_ID
CLIENT_ID                     
1          20150331        1.0
1          20150430        1.0
1          20150531        1.0
1          20150630        1.0
1          20150731        1.0
2          20150331        2.0
2          20150430        2.0
2          20150531        2.0
2          20150630        2.0
2          20150731        2.0

如果我们从 df2 创建

pd.DataFrame({'ID':df1.CLIENT_ID.unique()}).assign(key=1).merge(df2.assign(key=1))
   ID  key      DATE
0   1    1  20150331
1   1    1  20150430
2   1    1  20150531
3   1    1  20150630
4   1    1  20150731
5   2    1  20150331
6   2    1  20150430
7   2    1  20150531
8   2    1  20150630
9   2    1  20150731

推荐阅读