Сравните два столбца в кадре данных и обновите результат в другом столбце. - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть файл Excel, который я импортировал как фрейм данных.Набор данных выглядит следующим образом:

rule_id reqid1  reqid2  reqid3  
53139    0         0     1           
51181    1         1     0           
50412    0         1     1           
50356    0         0     1           
50239    0         1     0           
50238    1         1     0           
50014    1         0     1

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

rule_id reqid1  reqid2  reqid3  comparison1 comparison2 last_comp
53139    0         0     1           NaN         NaN         100
51181    1         1     0           1.0         50.0         0
50412    0         1     1           NaN         1.0          50
50356    0         0     1           NaN         NaN         100
50239    0         1     0           NaN         100.0        0
50238    1         1     0           1.0         50.0         0
50014    1         0     1           100.0       NaN         100

столбец сравнения1 - это сравнение значений между reqid1 и reqid2, сравнение2 - сравнение значений между reqid2 и reqid3, а last_comp - сравнение значений между reqid3 и reqid4, но reqid4не доступен.Таким образом, логика для этих значений заключается в том, что если я сравниваю два столбца, и если оба столбца имеют значение 0, то в новом столбце будет зафиксировано нулевое значение.Если первый столбец имеет 1, а второй столбец имеет 0, то 100 должно быть захвачено.Если оба столбца имеют 1, то в столбце сравнения 1 должно быть зафиксировано 1, но если в reqid3 значение равно 0, то в сравнении2 100/2, то есть 50, должно быть зафиксировано.Если в reqid3, если значение равно 0, тогда 0 должно быть зафиксировано в столбце last_comp, а если значение равно 1, то должно быть зафиксировано 100.Но если reqid2 и reqid3 оба имеют 1, то 50 должны быть захвачены.

Я не могу написать код для этого.Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вам нужно выяснить свою логику.Из того, что вы написали, это может охватывать первые два дополнительных столбца с использованием панд для вашего кадра данных.

import pandas as pd
# data
d = {'rule_id': [53139,51181,50412,50356,50239,50238,50014], 'reqid1':[0,1,0,0,0,1,1], 'reqid2':[0,1,1,0,1,1,0], 'reqid3':[1,0,1,1,0,0,1]}

df = pd.DataFrame(data=d)
# reorder columns
cols = df.columns.tolist()
cols = cols[-1:]+cols[:-1]
df = df[cols]

dataframe:

 rule_id  reqid1  reqid2  reqid3
0    53139       0       0       1
1    51181       1       1       0
2    50412       0       1       1
3    50356       0       0       1
4    50239       0       1       0
5    50238       1       1       0
6    50014       1       0       1

затем логика для новых столбцов:

c1 = list(map(lambda a,b: a if a==b else 100*a, df.reqid1, df.reqid2 ))
df['comp1']=c1

c2 = list(map(lambda b,c,c1: b if b==c else (b if b < c else 100/(b+c1)), df.reqid2, df.reqid3, df.comp1 ))
df['comp2']=c2


# convert your zeros to Nans with numpy:
import numpy as np

comps = ['comp1', 'comp2']
df[comps] = df[comps].replace({0:np.nan})

вывод:

   rule_id  reqid1  reqid2  reqid3  comp1  comp2
0    53139       0       0       1    NaN    NaN
1    51181       1       1       0    1.0   50.0
2    50412       0       1       1    NaN    1.0
3    50356       0       0       1    NaN    NaN
4    50239       0       1       0    NaN  100.0
5    50238       1       1       0    1.0   50.0
6    50014       1       0       1  100.0    NaN
0 голосов
/ 20 февраля 2019

Вот несколько простых кодов, с которых можно начать:

# Compare method, gets a row containing two values as input
def compare_values(row):
    a = row[0]
    b = row[1]

    # One of the rules
    if a == 1 and b == 0:
        return 100

    # TODO: implement other rules

    return None

# apply the `compare_values` method to all rows of ["reqid1", "reqid2"]
df["comparison1"] = df[["reqid1", "reqid2"]].apply(compare_values, axis=1)

# TODO: comparison2

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...