Python Count Различные значения из двух столбцов - PullRequest
1 голос
/ 22 октября 2019

Если у меня есть фрейм данных:

A                         B         C
0.0285714285714285        4         0.11428571
0.107142857142857         4         0.42857143
0.007142857142857         6         0.04285714
1.2                       4         5.5
1.5                       3         3

Требуемый вывод:

A*B                    C                       Difference            
0.114285714285714‬      0.11428571          0.000000004285714‬            
0.428571428571428‬      0.42857143         -0.000000001428572‬
0.042857142857142‬      0.04285714          0.000000002857142‬
4.8                    5.5                        -0.7
4.5                    3                           1.5

Count: 2

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

Не могли бы вы помочь мне об этом?

Ответы [ 2 ]

1 голос
/ 22 октября 2019

РЕДАКТИРОВАТЬ:

Поскольку значения в столбце A являются объектами (очевидно, строки):

df['A'] = df['A'].astype(float)

Если не работает, потому что плохие значения (например, некоторые строки) - плохие значенияизменено на NaN s:

df['A'] = pd.to_numeric(df['A'], errors='coerce')

Используйте Series.mask для установки нового столбца по условию с Series.between:

#multiple columns
df['A*B'] = df["A"]*df["B"]
#subtract to Series
diff = df['A*B'] - df['C']
#create mask
mask = diff.between(-0.1, 0.1)

df["difference"] = diff.mask(mask, 0)
print (df)
          A  B         C       A*B  difference
0  0.028571  4  0.114286  0.114286         0.0
1  0.107143  4  0.428571  0.428571         0.0
2  0.007143  6  0.042857  0.042857         0.0
3  1.200000  4  5.500000  4.800000        -0.7
4  1.500000  3  3.000000  4.500000         1.5

print (f'Count: {(~mask).sum()}')
Count: 2

Если важен порядок, добавьте DataFrame.insert с DataFrame.pop для столбцов извлечения:

df.insert(0, 'A*B',  df.pop("A")*df.pop("B"))
diff = df['A*B'] - df['C']
mask = diff.between(-0.1, 0.1)

df["difference"] = diff.mask(mask, 0)
print (df)
        A*B         C  difference
0  0.114286  0.114286         0.0
1  0.428571  0.428571         0.0
2  0.042857  0.042857         0.0
3  4.800000  5.500000        -0.7
4  4.500000  3.000000         1.5


print (f'Count: {(~mask).sum()}')
Count: 2
1 голос
/ 22 октября 2019

Использование np.where для проверки того, является ли результат достаточно значительным:

df["difference"] = np.where((df["A"]*df["B"]-df["C"]>=0.1)|(df["A"]*df["B"]-df["C"]<=-0.1),df["A"]*df["B"]-df["C"],0)

print (df)

#
          A  B         C  difference
0  0.028571  4  0.114286         0.0
1  0.107143  4  0.428571         0.0
2  0.007143  6  0.042857         0.0
3  1.200000  4  5.500000        -0.7
4  1.500000  3  3.000000         1.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...