Назначение ячеек данных Pandas с входными данными из других элементов данных - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь создать столбец Pandas df, используя информацию, хранящуюся как в том же самом df, так и во внешнем 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

Мысли или предложения?

1 Ответ

0 голосов
/ 11 января 2019

Сначала откройте стек 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"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...