簡體   English   中英

根據 pandas Dataframe 中的多列替換多列值

[英]Replace multiple column value based on multiple columns in pandas Dataframe

您的一些幫助將不勝感激。 我有一個 dataframe 如下所示:

  name  City kpi       01-Jan-20    02-Jan-20   03-Jan-20   SD       Mean
    1   A    X              9          9    9      0        0        9
    1   A    Y              120       120   120    0        0        120
    2   A    X              10         20   30    10       10        20
    2   A    Y              1          0           11   6.08276253    4
    3   B    X              1          2           3        1         2
    3   B    Y              2          100         5    55.73448962   35.66666667

我想有一個基於以下方法的 output,它采用所有天的 kpi 值(我在實際 df 中有 100 天)。

def indicator(kpi_value, kpi_std, kpi_mean ):
    SD_distance = abs((kpi_mean-kpi_value)/kpi_std)
    if SD_distance >=1.5:
        return -1
    else:
        return 1

最終的 output 應該是這樣的:

name    City    kpi 01-Jan-20   02-Jan-20   03-Jan-20      SD
1        A       X   1 or -1    1 or -1     1   or -1       0
1        A       Y   1 or -1    1 or -1     1 or -1         0
2        A       X   1 or -1    1 or -1     1 or -1         12.41739671
2        A       Y   1 or -1    1 or -1     1 or -1         0.016969928
3        B       X   1 or -1    1 or -1     1 or -1         0.013699487
3        B       Y   1 or -1    1 or -1     1 or -1         0

我嘗試了不同的方法,但無法成功。

date_cols = df_new.iloc[:,3:-2].columns
df_new[date_cols[0]] = df_new.apply(lambda x: indicator(x[date_cols[0]],x["SD"],x["Mean"])) 

很高興有任何建議。 謝謝!

我認為問題在於您在.apply() function 中缺少按列的axis=1參數。

date_cols = df_new.iloc[:,3:-2].columns
for col in date_cols:
    df_new[col] = df_new.apply(lambda x: indicator(x[col], x["SD"], x["Mean"]), axis=1)

print(df_new)

結果:

   name city kpi  01-Jan-20  02-Jan-20  03-Jan-20         SD        Mean
0     1    A   X          1          1         -1   0.000000    9.000000
1     1    A   Y          1          1         -1   0.000000  120.000000
2     2    A   X          1          1          1  10.000000   20.000000
3     2    A   Y          1          1          1   6.082763    4.000000
4     3    B   X          1          1          1   1.000000    2.000000
5     3    B   Y          1          1          1  55.734490   35.666667

注意 - 在您的indicator function 中,如果kpi_std為 0,語句SD_distance = abs((kpi_mean-kpi_value)/kpi_std)將給您錯誤。您可能需要重新審視該邏輯。 另外,您是如何得出預期結果中的SD值的? 有邏輯嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM