Я хочу заменить значения в фрейме данных на «1», используя другой фрейм данных в качестве ссылки для его сопоставления, что-то вроде этого:
Исходный фрейм данных A:
Index 201901 201902 201903
a 0 0 0
b 0 0 0
c 0 0 0
d 0 0 0
Фрейм справочных данных B
Index Month
a 201902
b 201901
Кадр данных результата C
Index 201901 201902 201903
a 0 1 0
b 1 0 0
c 0 0 0
d 0 0 0
Я пытался с loc, но не нашел способ заставить его работать. Какие-либо предложения?
3 ответа
Numpy назначить
df.values[df.index.get_indexer(dfb.index),df.columns.get_indexer(dfb.month)]=1
df
Out[1081]:
201901 201902 201903
a 0 1 0
b 1 0 0
c 0 0 0
d 0 0 0
Похоже, нет необходимости повторять. У меня есть простое решение с использованием pd.get_dummies
и pd.DataFrame.update
dfA.update(pd.get_dummies(dfB.Month.apply(str)))
Я использовал .apply(str)
, потому что содержимое dfB зарегистрировано как целое число, но столбцы из A являются строками, поэтому update
не будет работать, если поля не совпадают
Выход:
201901 201902 201903
Index
a 0.0 1.0 0
b 1.0 0.0 0
c 0.0 0.0 0
d 0.0 0.0 0
Вы можете использовать df.iterrows()
для итераций по строкам второго кадра данных и использовать df.at[]
для установки значений, где вам нужно.
df = pd.DataFrame([[0,0,0], [0,0,0], [0,0,0], [0,0,0]], columns=['201901', '201902', '201903'])
df.index=['a', 'b','c', 'd']
print(df)
# 201901 201902 201903
# a 0 0 0
# b 0 0 0
# c 0 0 0
# d 0 0 0
dfb = pd.DataFrame(['201902', '201901'], columns=['month'])
dfb.index = ['a', 'b']
print(dfb)
# month
# a 201902
# b 201901
for i, row in dfb.iterrows():
df.at[i, row] = 1
print(df)
# 201901 201902 201903
# a 0 1 0
# b 1 0 0
# c 0 0 0
# d 0 0 0
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.