#python #pandas #dataframe
Вопрос:
Я новичок в python, и мое кодирование немного подзабыто. Допустим, у вас есть два кадра данных, df1 и df2
>>> df1
A B
1 man
2 boy
3 girl
4 child
>>> df2
Begin end
2 10
4 12
6 14
8 16
Я хочу использовать значения из столбцов begin
и end
из df2
, чтобы создать второй столбец df1
и пометить соответствующие значения как до, внутри или после. Я попробовал некоторые коды (см. Ниже). Но он не смог выполнить эту работу за меня. Я получаю ошибку » Ошибка значения: значение истинности ряда неоднозначно. Используйте.empty, a.bool(), a.item(), a.any() или a.all()’.
position = []
for index, row in df1.iterrows():
if row['A'] < df2['start']:
position.append('before')
if row['A'] > df2['begin'] and row['A'] < df2['end']:
position.append('within')
if row['A'] > df2['begin'] and row['A'] > df2 ['end']:
position.append ('after')
d1['position'] = position
Комментарии:
1. Пожалуйста, покажите желаемый выходной кадр данных.
2. Под df2[«начать»] вы подразумеваете df2[«начать»] ?
3. Кстати » строка[‘A’] Pandas сравнивает значение строки[«A»] с каждым значением в столбце df2[«конец»] и возвращает столбец True/False. Отсюда ошибка Valueerror при попытке использовать результат в логическом операторе.
4. @ timeg это мой желаемый результат. Мой пример не самый лучший, но, пожалуйста, дайте мне знать, если вам нужны дополнительные разъяснения. A B C 1 мужчина до 2 мальчиков в течение 3 девочек в течение 4 детей в
5. @kubatucka я имел в виду df2 [«начать»]. Я внес исправления. Надеюсь, это сделает вопрос намного яснее.
Ответ №1:
В вашем коде много ошибок/несоответствий, но вот решение того, что, я думаю, вы пытаетесь сделать:
df1['position'] = ''
df1['position'].loc[df1.A < df2.begin] = 'before'
df1['position'].loc[df1.A > df2.end] = 'after'
df1['position'].loc[(df1.A <= df2.end) amp; (df1.A >= df2.begin)] = 'within'
Комментарии:
1. Спасибо вам за ваш ответ. Я запустил предоставленный вами код, но получил сообщение об ошибке «Ошибка значения: можно сравнивать только объекты серии с одинаковыми метками», я не упомянул, что два фрейма данных не совпадают с точки зрения индекса и номеров строк/столбцов.
2. Тогда я не понимаю. Для пяти строк A, с какой строкой в B вы хотите сравнить даты?
3. Приведенный выше пример является гипотетическим. Я хочу использовать значения из df2 (т. Е. начало и конец) и установить диапазон, который я буду использовать для присвоения меток значениям в df2. Я попытался добавить свой предполагаемый результат. Я ценю вашу помощь.