#python #pandas #dataframe #random #merge
Вопрос:
У меня есть эталонный фрейм данных df1 с 7 столбцами и 7 строками. Столбцы и индексы равны 0-7. Все значения равны 0. (Как уже говорилось, у меня есть фрейм данных 7×7 размером 49 0 секунд.)
У меня есть еще один меньший фрейм данных df2 с n столбцами и n строками, где n-случайное число Столбцы и индексы представляют собой n чисел в диапазоне [0, 7]. Значения являются случайными значениями.
Вы можете увидеть примеры ниже.
Что я хочу сделать, так это заменить 0 в df1, где df2 имеет тот же индекс столбец, и сохранить 0 в df1, где в df2 нет совпадения.
Это df1
# create a 7*7 dataframe of 0s
df1 = pd.DataFrame(np.zeros((7, 7)))
print(df1.columns)
print(df1.index)
df1
Это df2
# create random n-dimention-dataframe, where n must <= 6
import random
n = random.randrange(1, 7)
arr = np.random.randint(500, size=(n, n))
df2 = pd.DataFrame(arr, index = random.sample(range(0, 7), n), columns = random.sample(range(0, 7), n))
print(df2.columns)
print(df2.index)
df2
Так что, в конце концов, я хочу чего-то подобного. Я сделал этот пример таблицы в Excel, потому что именно поэтому я здесь — мне нужен такой фрейм данных — индекс и столбец совпадают и в том же порядке, что и df1; некоторые значения поступают из df2; несопоставимые ячейки остаются 0. Напоминание о том, что его необходимо автоматизировать, чтобы определить, какие номера столбцов/индексов находятся в df2, чтобы произвести замену, поскольку df2 исходит от случайных генераторов.
Большое спасибо, если бы вы могли, пожалуйста, помочь!!
Комментарии:
1.
df1.loc[df2.index, df2.columns] = df2.loc[df2.index, df2.columns]
2.Похоже, вы могли бы просто переиндексировать
df2
напрямую, неdf1
будучи предварительно созданным- > >df1 = df2.reindex(index=range(7), columns=range(7), fill_value=0)
если я не ошибаюсь.3. Спасибо, Д. би и @Генри Экер. Оба метода работают. 🙂
4. //Спасибо, @d.b и Генри Экер. Оба метода работают. 🙂