Как добавить значение к отсутствующему значению я - PullRequest
1 голос
/ 26 июня 2019

У меня есть фрейм данных,

    Software Product    Case Number Num of days
    MDM9607.LE.1.0          2774904     -19.13888889
    MDM9607.LE.1.0          2774203     -19.60069444
    MDM9607.LE.1.0          2768088       -24.81597222
    MDM9607.LE.1.0          2767500       -25.0125
    MDM9607.LE.1.0          2764617        -26.67916667
    MDM9607.LE.1.0          2766991      -25.17430556
    MDM9607.LE.1.0          2765696
    MDM9607.LE.1.0          2764204
    MDM9607.LE.1.0         2764199
    MDM9607.LE.1.0         2774434           365
    MDM9607.LE.1.0         2769029           377
    MDM9607.LE.1.0         2764195           380
    MDM9607.LE.1.0        2763721             25
    MDM9607.LE.1.0        2770456             380
    MDM9607.LE.1.0       2768423


Требуемые условия вывода:

    If:
        f9['Num of days'] > 365 than print L
        f9['Num of days'] < 365 than print N
        f9['Num of days'] == NaN than print U

Код:

    import pandas as pd
    import numpy as np

    df1 = pd.read_excel(r"Rawreport_2017.xlsx")
    df2 = pd.read_excel(r"Sampleswpl.xlsx")
    f9 = pd.merge(df1, df2, on=['Software Product'], how='outer')
    f9.to_excel(r"merge_new_1.xlsx")
    f9['Num of days'] = f9['Date/Time Opened'] - f9['CSDate']
    f9['Num of days_u']=f9['Num of days'].fillna('u')
    f9['status'] = np.where(f9['Num of days'] > 365, 'L', 'NL','u')
    f9.to_excel(r"merge_status_5.xlsx")

Я использую Dataframe, который содержит некоторые пропущенные значения, что пропущенные значения должны быть напечатаны как Неизвестные, но я придерживаюсь определенной логики, если столбец больше 365, тогда он должен быть напечатан как "L" <365 должен быть напечатан как "N ", но это недостающее значение также рассматривается как 0 (ноль) и печатается как" N ". </p>

Ожидаемый результат должен быть

     Software Product   Case Number     Num of days    Status
    MDM9607.LE.1.0          2774904     -19.13888889        N
    MDM9607.LE.1.0          2774203     -19.60069444        N
    MDM9607.LE.1.0          2768088       -24.81597222      N
    MDM9607.LE.1.0          2767500       -25.0125          N
    MDM9607.LE.1.0          2764617        -26.67916667     N
    MDM9607.LE.1.0          2766991      -25.17430556       N
    MDM9607.LE.1.0          2765696                         U
    MDM9607.LE.1.0          2764204                         U
    MDM9607.LE.1.0         2764199                          U
    MDM9607.LE.1.0         2774434           365            L
    MDM9607.LE.1.0         2769029           377            L
    MDM9607.LE.1.0         2764195           380            L
    MDM9607.LE.1.0        2763721             25            N
    MDM9607.LE.1.0        2770456             380           L

Я использовал выше, но я получил:

TypeError: where() takes at most 3 arguments (4 given)

1 Ответ

0 голосов
/ 26 июня 2019

Использовать numpy.select - сначала пропустить пропущенные значения Series.isna, затем по условию, последний параметр использования default:

m1 = f9['Num of days'].isna()
m2 = f9['Num of days'] > 365

f9['Status'] = np.select([m1, m2], ['U','L'], default='N')

print (f9)
   Software Product  Case Number  Num of days Status
0    MDM9607.LE.1.0      2774904   -19.138889      N
1    MDM9607.LE.1.0      2774203   -19.600694      N
2    MDM9607.LE.1.0      2768088   -24.815972      N
3    MDM9607.LE.1.0      2767500   -25.012500      N
4    MDM9607.LE.1.0      2764617   -26.679167      N
5    MDM9607.LE.1.0      2766991   -25.174306      N
6    MDM9607.LE.1.0      2765696          NaN      U
7    MDM9607.LE.1.0      2764204          NaN      U
8    MDM9607.LE.1.0      2764199          NaN      U
9    MDM9607.LE.1.0      2774434   365.000000      N
10   MDM9607.LE.1.0      2769029   377.000000      L
11   MDM9607.LE.1.0      2764195   380.000000      L
12   MDM9607.LE.1.0      2763721    25.000000      N
13   MDM9607.LE.1.0      2770456   380.000000      L
14   MDM9607.LE.1.0      2768423          NaN      U
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...