[英]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.