python - 如何为每个用户 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'])
我希望为每个客户重复所有日期,如下所示:
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'])
我试过这个,但结果不是我们想要的
pd.merge(df1, df2, on='DATE', how='outer')
谢谢您的帮助。
解决方案
不知道为什么你需要 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
推荐阅读
- c# - 如何在针对 iOS 的 Xamarin Forms 应用程序中使用 Apple SF 符号实现
- wolfram-mathematica - Wolfram-Mathematica 中符号积分的解法
- microsoft-edge - 将 Google 扩展上传到 Microsoft Edge Add-on Store - _MACOSX 错误
- r - `select()` 和基本 R 汇总函数一起使用
- logic - 从真值表中找到表达式
- .net - Xpath 表达式以获取满足条件的第一个父级
- excel - 更改散点图上的点标记、大小和颜色
- jenkins - Job DSL 插件:Casc 重新加载按钮工作正常,但 Groovy 脚本不行?
- swift - Firebase FCM 和订阅主题说明
- linechart - Echart:折线图反向图例切换行为