我有两个数据帧,我想通过比较不同列上的日期来合并它们.

这是列出工作单位和日期的数据帧.累计工时是指工人以前完成的工时数.此工作组的领导标识为领导名称.

Work_unit    Date      leader_name  Cum_work

unit1       11/12/2017      Bob           2
unit2       12/14/2018      David         1
unit3       12/13/2019      Ada           3
unit4       1/1/2019        Bob           3
unit5       12/13/2019      Ada           4

这是显示每个任务的协作者的另一个数据帧.日期表示此协作者处理任务的日期.

Work_unit     Date      collaborators 

unit2       12/13/2018      Bob
unit2       12/30/2018      Ada
unit3       1/10/2019       Bob
unit3       2/3/2019        Casey
unit4       12/30/2020      Ada
unit4       12/31/2020      David

我想结合两个数据帧来演示工作协作,并显示协作者的资历.

例如,Bob是工作单元1的负责人,但他也是单元2中的合作者.我想通过比较日期将Bob的累计工时从dataframe1(他完成的领导工作的数量)映射到dataframe2,因此,对于单元2中的Bob,Cumworks_afar应该是2.

因此,合并后的数据帧将是

Work_unit     Date   collaborators   Cumworks_sofar

unit2       12/13/2018      Bob              2
unit2       12/30/2018      Ada              3
unit3       1/10/2019       Bob              3
unit3       2/3/2019        Casey            0
unit4       12/30/2020      Ada              4
unit4       12/31/2020      David            1

谢谢你的帮助

推荐答案

merge_asofbackward个方向,

df1.sort_values(by=['Date'], inplace=True)

output = pd.merge_asof(df2, df1, on='Date', left_by='collaborators', right_by='leader_name', direction='backward')
output.drop(['Work_unit_y', 'leader_name'], axis=1, inplace=True)
output.rename(columns={'Work_unit_x': 'Work_unit'}, inplace=True)
output
###
  Work_unit       Date collaborators  Cum_work
0     unit2 2018-12-13           Bob       2.0
1     unit2 2018-12-30           Ada       NaN
2     unit3 2019-01-10           Bob       3.0
3     unit3 2019-02-03         Casey       NaN
4     unit4 2020-12-30           Ada       4.0
5     unit4 2020-12-31         David       1.0

我认为Ada的第一个记录应该是没有记录,因为她在2018-12-30之前没有工作,因为Cum_work是一个累积指标.



如果Ada问题得到解决,最后一部分是填写NaN:

output.fillna(0, inplace=True)

Python相关问答推荐

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

将输入管道传输到正在运行的Python脚本中

从dict的列中分钟

用合并列替换现有列并重命名

创建可序列化数据模型的最佳方法

计算分布的标准差

如何在Python中获取`Genericums`超级类型?

ConversationalRetrivalChain引发键错误

导入错误:无法导入名称';操作';

BeautifulSoup:超过24个字符(从a到z)的迭代失败:降低了首次深入了解数据集的复杂性:

如何在Python Pandas中填充外部连接后的列中填充DDL值

如何在GEKKO中使用复共轭物

如何在Gekko中处理跨矢量优化

遍历列表列表,然后创建数据帧

在Pandas 中以十六进制显示/打印列?

将数据从一个单元格保存到Jupyter笔记本中的下一个单元格

#将多条一维曲线计算成其二维数组(图像)表示

组颠倒大Pandas 数据帧

搜索结果未显示.我的URL选项卡显示:http://127.0.0.1:8000/search?";,而不是这个:";http://127.0.0.1:8000/search?q=name";