#python #pandas #dataframe #variable-assignment #multi-index
Вопрос:
У меня есть фрейм данных:
Это для работы, поэтому я просто собираюсь упростить ее и вложить в нее минимальный объем данных, я называю это данными:
| induction date | shop |
| -------------- | -------------- |
|2021-07-18 | AD9 |
| 2021-07-26 | DL9 |
Я хочу добавить третий столбец под названием НЗП, который захватывает НЗП из другого кадра данных (мультииндексный) этого формата на основе сопоставления даты введения и МАГАЗИНА, я называю этот НЗП:
| WIP |
|-------|
| date | shop | |
| -------------- | -------------- | |
| 2021-07-18 | AD9 | 7 |
| 2021-07-26 | DL9 | 3 |
Хотя мне не повезло, я попытался преобразовать фрейм данных WIP в словарь и использовать карту, но это не работает, я получаю ключевую ошибку. Я не знаю, из-за многоуровневого индекса или из-за чего, но я застрял.
Я также попытался просто назначить его, сославшись на фрейм данных WIP и исходные столбцы, такие как:
data['WIP']=WIPbyShop.loc[data['DATE_INDUCTED', 'SHOP']].WIP
но это дает мне ключевую ошибку. Любые идеи/предложения будут высоко оценены! Я чувствую, что должен быть довольно простой способ сделать это, и как будто я перестал усложнять это.
Ответ №1:
Мы можем попробовать join
указать аргумент on
ключевого слова, чтобы указать ему выравнивание мультииндекса по столбцам в data
:
data = data.join(WIPbyShop['WIP'], on=['induction date', 'shop'])
data
:
induction date shop WIP
0 2021-07-18 AD9 7
1 2021-07-26 DL9 3
Установка:
import pandas as pd
data = pd.DataFrame({
'induction date': ['2021-07-18', '2021-07-26'],
'shop': ['AD9', 'DL9']
})
# Reversed DataFrame rows to show alignment
WIPbyShop = pd.DataFrame({
'date': ['2021-07-26', '2021-07-18'],
'shop': ['DL9', 'AD9'],
'WIP': [3, 7]
}).set_index(['date', 'shop'])
# data
induction date shop
0 2021-07-18 AD9
1 2021-07-26 DL9
# WIPbyShop
WIP
date shop
2021-07-26 DL9 3
2021-07-18 AD9 7
Комментарии:
1. Спасибо за быстрый ответ, но это дало: Ошибка значения: вы пытаетесь объединить столбцы datetime64[ns] и объект. Если вы хотите продолжить, вам следует использовать pd.concat
2. Один из ваших столбцов даты-это дата-время, а другой-строка. Вы должны сделать их либо строковыми, либо обоими датами.
3. Нет, они оба датированы временем, я просто дважды проверил.
4. Этого не может быть, если вы получаете сообщение об ошибке, в котором говорится, что один является объектом, а другой-datetime64[ns]
5. Хорошо, вы правы, я добавил дополнительную строку, используя pd.to_datetime для столбца даты НЗП, и это устранило проблему, и теперь это работает. Спасибо вам за быстрый ответ!