Сравнение значений столбцов один к одному между двумя кадрами данных - панды - PullRequest
1 голос
/ 21 октября 2019

У меня есть 2 кадра данных -

print(d)
   Year  Salary  Amount  Amount1  Amount2
0  2019    1200      53       53       53
1  2020    3443     455      455      455
2  2021    6777     123      123      123
3  2019    5466     313      313      313
4  2020    4656     545      545      545
5  2021    4565     775      775      775
6  2019    4654     567      567      567
7  2020    7867     657      657      657
8  2021    6766     567      567      567

print(d1)

   Year  Salary  Amount  Amount1  Amount2
0  2019    1200      53       73       63
import pandas as pd

d = pd.DataFrame({
    'Year': [
                2019,
                2020,
                2021,
            ] * 3,
    'Salary': [
        1200,
        3443,
        6777,
        5466,
        4656,
        4565,
        4654,
        7867,
        6766
    ],
    'Amount': [
        53,
        455,
        123,
        313,
        545,
        775,
        567,
        657,
        567
    ],
    'Amount1': [
        53,
        455,
        123,
        313,
        545,
        775,
        567,
        657,
        567
    ], 'Amount2': [
        53,
        455,
        123,
        313,
        545,
        775,
        567,
        657,
        567
    ]
})

d1 = pd.DataFrame({
    'Year': [
        2019
    ],
    'Salary': [
        1200
    ],
    'Amount': [
        53
    ],
    'Amount1': [
        73
    ], 'Amount2': [
        63
    ]
})

Я хочу сравнить значение «Зарплата» в кадре d1, т. Е. 1200, со всеми значениями «Зарплата» в кадре данных d и установить счетчик, еслиэто> = или <(логическое сравнение) - это должно быть сделано для всех столбцов (сумма, сумма1, сумма2 и т. д.), если значение в любом столбце d1 равно NaN / Нет, сравнение не требуется. Имя столбцов всегда будет одинаковым, поэтому это сравнение столбцов один к одному. </p>

Мой подход и мысли - я могу получить значения d1 в списке, выполнив -

l = []
for i in range(len(d1.columns.values)):
    if i == 0:
        continue
    else:
        num = d1.iloc[0, i]
        l.append(num)
print(l)

# list comprehension equivalent

lst = [d1.iloc[0, i] for i in range(len(d1.columns.values)) if i != 0]


[1200, 53, 73, 63]

и затем использовать итерроу для перебора всех столбцов и строк в кадре данных d ИЛИ Я могу перебрать d, а затем выполнить аналогичное сравнение, выполнив цикл по d1 - но это потребует много времени для больших измеренийФрейм данных (в данном случае d). Что может быть более эффективным или питонским способом сделать это?

1 Ответ

0 голосов
/ 21 октября 2019

IIUC, вы можете сделать:

(df1 >= df2.values).sum()

Вывод:

Year       9
Salary     9
Amount     9
Amount1    8
Amount2    8
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...