首页 > 解决方案 > 为 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

想法或建议?

标签: pythonpandasdataframe

解决方案


首先解压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"])

推荐阅读