Разница между строками с одинаковыми переменными - PullRequest
0 голосов
/ 14 января 2019

У меня есть таблица (приблизительно 14 000 строк или около 100 столбцов), в которой порядок не может быть изменен. Каждая строка сделана уникальной по количеству столбцов, которые я упростил ниже.

Предположим, у нас есть таблица ниже, мне нужно создать новый столбец, который принимает разницу между строками, которые имеют один и тот же Col2 / Col3 (но являются уникальными по столбцу 1). В идеале я не хочу касаться порядка, чтобы добиться этого.

Примечание: в действительности есть 7 переменных, которые будут точно совпадать, и 1 переменная, которая оставит две оставшиеся. т.е. объединенная переменная будет 2-А-А-А-А-А-А-А / 5-А-А-А-А-А-А-А. Всегда остается только 2, когда первые 7 переменных идентичны, и я смотрю на сравнение этих двух.

Спасибо!

    Col1    Col2    Col3    Percentage
     2       A       X        5%
     2       B       Y        4%
     2       C       Z        3%
     5       A       X        2%
     5       B       Y        1%
     5       C       Z        5%

   Desired:

   Col1    Col2    Col3    Percentage   Difference
      2       A       X        5%        3%   (*note: matches A/X to get 5%-2%=3%)
      2       B       Y        4%        3%      
      2       C       Z        3%       -2%
      5       A       X        2%        3%
      5       B       Y        1%        3%
      5       C       Z        5%       -2%

1 Ответ

0 голосов
/ 15 января 2019

Я решил это, но я верю неэффективно!

Я создал новый фрейм данных

df2 = df[['Col1','Col2','Co3','Percentgage']]

Создан новый столбец в df2, который является зеркалом столбца 1 (т.е. если 2 = 5, если 5 = 2)

df2['opposite_col1'] = np.where(df2['Col1']==2,5,2)

Убрал исходный столбец 1 и переименовал новый столбец в столбец 1

df2.drop('Col1',axis=1)
df2.columns = ['Col2,'Col3','Mirror_Percentgage','Col1']

Это выглядит следующим образом (примечание, идентично таблице 1, за исключением того, что столбец col1 зеркально отражен).

Col1    Col2    Col3    Mirror_Percentage
 5       A       X        5%
 5       B       Y        4%
 5       C       Z        3%
 2       A       X        2%
 2       B       Y        1%
 2       C       Z        5%

Затем просто объедините df с df2 на Col1, Col2, Col3 - это оставляет нам исходную таблицу, за исключением дополнительного столбца «Mirror_Percentgage».

Затем я создаю новый столбец, который находит поле:

df['Mirror_margin'] = df['Percentgage'] - df['Mirror_Percentgage']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...