У меня есть два кадра данных (df1 и df2), которые используются pd.groupby из одного и того же кадра данных. Я хочу условно создать еще один кадр данных (df_result) на основе следующей логики:
- Структура/ячейка df_result скопирована из df1
- Для count < 6 в df1 вместо этого используйте соответствующее значение в df2.
ВХОД1: df1
Type_lv1 Type_lv2 diff
count mean
t1 t_a 1 0.02
t_b 12 0.01
t2 t_a 5 0.12
t_b 22 0.11
ВХОД2: df2
Type_lv1 diff
count mean
t1 13 0.011
t2 27 0.11
ВЫВОД: df_result
Type_lv1 Type_lv2 diff_result
mean
t1 t_a 0.011
t_b 0.01
t2 t_a 0.11
t_b 0.11
В примерных данных выше первая строка roq и третья строка в df_result исходят из df2, поскольку счетчики в df1 равны 1 и 5, что меньше порогового значения 6. Я пытался найти связанные образцы в прошлых вопросах, но смог получить то, что хочу . Может ли кто-нибудь дать мне несколько направлений?
Благодарность!!
1 ответ
Идея состоит в том, чтобы добавить второй уровень от df1
до df2
для MultiIndex
, поэтому возможна замена по условию на последнем шаге, необходимо только соответствие первого уровня MultiIndex в обоих DataFrame
:
m = df1[('diff','count')] < 6
mux = pd.MultiIndex.from_product([df2.index.unique(),
df1.index.get_level_values(1).unique()])
df3 = df2.reindex(mux, level=0)
df1.loc[m, ('diff','mean')] = df3[('diff','mean')]
print (df1)
diff
count mean
Type_lv1 Type_lv2
t1 t_a 1 0.011
t_b 12 0.010
t2 t_a 5 0.110
t_b 22 0.110
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.
mux = pd.MultiIndex.from_product([df2.index.unique(), df1.index.get_level_values(1).unique()])
произошла ошибка:NotImplementedError: isna is not defined for MultiIndex
. У вас есть какие-либо предложения?print (df2.index.unique())
илиdf1.index.get_level_values(1).unique()
или в обоих?