Панды - более разумный способ разделить некоторые столбцы на DataFrame на другой DataFramePython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Панды - более разумный способ разделить некоторые столбцы на DataFrame на другой DataFrame

Сообщение Anonymous »

У меня есть DataFrame df1 , который имеет столбец года и цифровые столбцы. Значения года в DF1 не являются уникальными. Я хотел бы нормализовать числовые столбцы DF1 на годовом уровне, используя определенную функцию. Для этого у меня есть еще один DataFrame DF2 , который имеет столбец года, и с теми же числовыми столбцами, что и в df1 . Чтобы сделать перенормировку, я хочу разделить все числовые столбцы в определенный год с DF2 за этот год. Есть «умный» способ выполнения той же процедуры. < /p>

Код: Выделить всё

import pandas as pd

df1 = pd.DataFrame({
'year': [1, 1, 0, 0],
'B': [4, 2, 1, 5],
'C': [5, 3, 2, 6],
'D': ["Good 1", "Good 2", "Good 1", "Good 2"]
})
df1
< /code>
   year  B  C       D
0     1  4  5  Good 1
1     1  2  3  Good 2
2     0  1  2  Good 1
3     0  5  6  Good 2
< /code>
df2 = pd.DataFrame({'year': [1, 0], 'B': [3, 5], 'C': [4, 7]})
df2
< /code>
   year  B  C
0     1  3  4
1     0  5  7
< /code>
vars_to_replace = ['B', 'C']
< /code>
This works:
for year in df1.year.unique():
df1.loc[df1.year == year, vars_to_replace] /= df2.loc[df2.year == year, vars_to_replace].values

df1
< /code>
   year         B         C       D
0     1  1.333333  1.250000  Good 1
1     1  0.666667  0.750000  Good 2
2     0  0.200000  0.285714  Good 1
3     0  1.000000  0.857143  Good 2
< /code>
The code achieves what I want but I'm not too happy with having to use for-loops. I've tried other alternatives but can't make it work. Any ideas? I've tried the following approach but it doesn't work because df1
не уникаль в год.

Код: Выделить всё

df1.set_index("year", inplace=True)
df2.set_index("year", inplace=True)
df1.loc[:, vars_to_replace] /= df2
< /code>
The last command returns a "ValueError: cannot reindex on an axis with duplicate labels"
NOTE: after doing research on the questions and answers concerning this topic on SO, I was unable to find a case that covers a multicolumn operation where the indexes (year in df1
в моем примере) не уникальны.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -dataframe
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»