Pandas Dataframe, как перебирать строки и выполнять вычисления по их значениям - PullRequest
0 голосов
/ 25 февраля 2020

Я начал работать с Pandas Dataframe и попытался выяснить, как справиться с приведенной ниже задачей. У меня есть таблица Excel, которую нужно импортировать в Pandas DataFrame, и для заполнения столбцов PercentageOnSale, Bonus и EmployeesIncome необходимо выполнить следующие расчеты. Если сумма всех SalesValues ​​для EmployeeID меньше 5000, PercentageOnSale должен составлять 5% от SalesValue. Если сумма всех SalesValues ​​для EmployeeID равна или превышает 5000, PercentageOnSale должен составлять 7% от SalesValue. Если сумма всех SalesValues ​​для EmployeeID превышает 10.000, PercentageOnSale должен составлять 7% от SalesValue и дополнительно должен рассчитываться бонус в размере 3%. EmployeesIncome - это сумма столбцов PercentageOnSale и Bonus. образец в формате Excel

1 Ответ

0 голосов
/ 25 февраля 2020

Вы можете попробовать groupby-apply следующим образом:

# Data
df = pd.DataFrame({"EmployeeID":[1,1,2,3,1,3,5,1],
                   "ProductSold":["P1","P2","P3","P1","P2","P3","P1","P2"],
                   "SalesValue":[3000,3500,4000,3000,5000,3000,3000,4000]})

# Calculations
def calculate(x):
    # Calcualte Bonus
    x['Bonus'] = 0
    if x['SalesValue'].sum() > 10000:
        x['Bonus'] = 0.03*x['SalesValue']

    # Calculate PercentageOnSale
    if x['SalesValue'].sum() < 3000:
        x['PercentageOnSale'] = 0.05*x['SalesValue']
    else:
        x['PercentageOnSale'] = 0.07*x['SalesValue']

    # Total Income per sale
    x['EmployeesIncome'] = x['PercentageOnSale'] + x['Bonus']

    return x    

df_final = df.groupby('EmployeeID').apply(calculate)

Вывод будет следующим:

      EmployeeID ProductSold  SalesValue  Bonus  PercentageOnSale  EmployeesIncome
0           1          P1        3000   90.0             210.0            300.0
1           1          P2        3500  105.0             245.0            350.0
2           2          P3        4000    0.0             280.0            280.0
3           3          P1        3000    0.0             210.0            210.0
4           1          P2        5000  150.0             350.0            500.0
5           3          P3        3000    0.0             210.0            210.0
6           5          P1        3000    0.0             210.0            210.0
7           1          P2        4000  120.0             280.0            400.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...