Как добавить значения в Pandas Dataframe, используя вложенный цикл for?

У меня есть два фрейма данных, содержащие значения с плавающей запятой.

  1. Первый представляет собой фрейм данных с 1 столбцом, который содержит позиции.
  2. Второй представляет собой матрицу ncol, равного количеству идентификаторов, и nrows, равного nrow первого кадра данных.

Идея состоит в том, чтобы создать новый фрейм данных того же размера, что и второй. Он должен содержать уравнение между каждым значением 1-го фрейма данных и каждым значением для каждого столбца второго. Идея состоит в том, что он будет перебирать каждую строку для одного столбца перед переходом к следующему.

Эквация будет примерно такой df1 * df2 / len(df1)+1 Пример данных:

df1 = pd.DataFrame([10,20,30,40,50,60], columns=['POS'])
df2 = pd.DataFrame({"ID1" : [0,2,4,6,8,10] , "ID2" :[1,3,5,7,9,11]})
final = pd.DataFrame({"ID1" : [0, 5.714285714, 17.14285714, 34.28571429, 57.14285714, 85.71428571] , "ID2" :[1.428571429, 8.571428571, 21.42857143, 40, 64.28571429, 94.28571429]})

Я думаю, что вложенный цикл будет примерно таким, но я все еще не могу правильно ответить. Что мне не хватает?

final = pd.DataFrame([])
for i in list(range(0,len(df1))):
          for j in list(range(0,len(df2))):
                        final.append(df2.iloc[i,j] * df1[0][i] / len(df1)+1)

В R ответ такой:

for (i in 1:nrow(df1)){
  for (j in 1:ncol(df2)){
    final[i,j] <- (df2[i,j] * df1[i,1]) / nrow(df1)+1
  }
}

Пожалуйста, опубликуйте некоторые образцы данных. Есть лучшие способы сделать это.

mcsoini 14.01.2023 23:00

пропустил это, есть пример и результат

Paulo Cecco 14.01.2023 23:10
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В Pandorable вы можете сделать это с помощью pandas.DataFrame.squeeze и pandas.DataFrame.mul:

result = df2.mul(df1.squeeze(), axis=0).div(len(df1)+1)

Выход :

print(result)

         ID1        ID2
0   0.000000   1.428571
1   5.714286   8.571429
2  17.142857  21.428571
3  34.285714  40.000000
4  57.142857  64.285714
5  85.714286  94.285714

Это дало мне результат, но мне было интересно, есть ли способ перебрать каждое значение, потому что этот ответ хорошо работает, когда это простое умножение, но что, если вам нужно выполнить дополнительный расчет? Допустим, df1 * df2 / (len(df1) * df2)

Paulo Cecco 14.01.2023 23:30

Это не то, что говорит фрейм данных result, которым вы поделились. Можете ли вы обновить его соответственно?

Timeless 14.01.2023 23:32

Явно для расчета df1 * df2 / (len(df1) * df2):

pd.DataFrame((df1.values * df2.values) / (len(df1) * df2.values), columns=df2.columns)

         ID1        ID2
0        NaN   1.666667
1   3.333333   3.333333
2   5.000000   5.000000
3   6.666667   6.666667
4   8.333333   8.333333
5  10.000000  10.000000

Другие вопросы по теме