python - 为 Pandas 数据框单元分配来自其他数据框元素的输入
问题描述
我正在尝试使用存储在同一个 df 和外部 df 中的信息创建一个 Pandas df 列。
df=pd.DataFrame([["1/1/2019","1st Shift"],["1/1/2019","2nd Shift"],["1/1/2019","3rd Shift"],["1/2/2019","1st Shift"],["1/2/2019","2nd Shift"],["1/2/2019","3rd Shift"],["1/3/2019","1st Shift"],["1/3/2019","2nd Shift"],["1/3/2019","3rd Shift"]],columns=["date","shift"])
date shift
0 1/1/2019 1st Shift
1 1/1/2019 2nd Shift
2 1/1/2019 3rd Shift
3 1/2/2019 1st Shift
4 1/2/2019 2nd Shift
5 1/2/2019 3rd Shift
6 1/3/2019 1st Shift
7 1/3/2019 2nd Shift
8 1/3/2019 3rd Shift
lookup_df=pd.DataFrame([["1/1/2019","Andy","Barry","Charley"],["1/1/2019","Barry","Charley","Andy"],["1/1/2019","Andy","Barry","Charley"]],columns=["date","1st Shift","2nd Shift","3rd Shift"])
date 1st Shift 2nd Shift 3rd Shift
0 1/1/2019 Andy Barry Charley
1 1/2/2019 Barry Charley Andy
2 1/3/2019 Andy Barry Charley
我想要的结果是将lookup_df中的数据添加到df中:
date shift staff
0 1/1/2019 1st Shift Andy
1 1/1/2019 2nd Shift Barry
2 1/1/2019 3rd Shift Charley
3 1/2/2019 1st Shift Barry
4 1/2/2019 2nd Shift Charley
5 1/2/2019 3rd Shift Andy
6 1/3/2019 1st Shift Andy
7 1/3/2019 2nd Shift Barry
8 1/3/2019 3rd Shift Charley
但是,当我尝试:
df["staff"]=lookup_df[(lookup_df["date"]==df["date"])][df["shift"]]
我得到:
ValueError: Can only compare identically-labeled Series objects
想法或建议?
解决方案
首先解压lookup_df
lookup_df = lookup_df.set_index("date").unstack().reset_index()
lookup_df.columns = ["shift", "date", "staff"]
然后合并两个数据框
new_df = pd.merge(df, lookup_df, how="inner", on=["date", "shift"])
推荐阅读
- list - 对列表中值的数量进行分类
- azure - 条纹 - Blazor - 天蓝色
- python - 无意中在 matplotlib 中绘制多条线
- python - 保存/加载双端队列
- sql - 从 SAP/Sybase ASE 上的事务中运行 sp_rename 的解决方法(错误 17260)
- lucene - 如果在 Lucene 8.6.1 中未操作索引,docids 是否不变?
- security - Digital Ocean VPC Droplets 无法相互连接
- python - ydl.download 下载但未继续执行代码
- r - 在 ggplot2 的 aes() 中使用组参数
- java - 我将如何更改它以使其发生在所有实体上,而不仅仅是玩家 Minecraft Forge 改装