亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據閾值更改雙索引數據框中的值

根據閾值更改雙索引數據框中的值

心有法竹 2022-06-22 17:04:26
因此,我正在使用一個非常大的數據集,但我正在使用一個小得多的數據集作為我需要做的模板。假設我有以下 2 個數據框:import numpy as npimport pandas as pddf = pd.DataFrame({   'cond': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B','B', 'B', 'B', 'B', 'B','B','B'],   'Array':  ['S', 'S', 'TT', 'TT','S', 'S', 'TT', 'TT','S', 'S', 'TT', 'TT','S', 'S', 'TT', 'TT','SS','TT'],   'X':  [1, 2, 3, 1, 2 , 3, 4, 7.3, 5.1, 3.2, 1.4, 5.5, 9.9, 3.2, 1.1, 3.3, 1.2, 5.4],   'Y':  [3.1, 2.2, 2.1, 1.2,  2.4, 1.2, 1.5, 1.33, 1.5, 1.6, 1.4, 1.3, 0.9, 0.78, 1.2, 4.0, 5.0, 6.0],   'Marker':  [2.0, 1.2, 1.2, 2.01, 2.55, 2.05, 1.66, 3.2, 3.21, 3.04, 8.01, 9.1, 7.06, 8.1, 7.9, 5.12, 5.23, 5.15],   'Area': [3.0, 2.0, 2.88, 1.33,  2.44, 1.25, 1.53, 1.0, 0.156, 2.0, 2.4, 6.3, 6.9, 9.78, 10.2, 15.0, 16.0, 19.0]})print(df)df2 = pd.DataFrame({   'cond': ['A', 'A', 'B', 'B', 'B'],   'Array':  ['S', 'TT', 'S', 'SS','TT'],   'cutoff1':  [2.55, 2.01, 7.06, 1, 8.01],   'cutoff2':  [1.60, 2.2, 2.1, 1.2,  2.4]})print(df2)這會產生以下兩組:   cond Array    X     Y  Marker    Area0     A     S  1.0  3.10    2.00   3.0001     A     S  2.0  2.20    1.20   2.0002     A    TT  3.0  2.10    1.20   2.8803     A    TT  1.0  1.20    2.01   1.3304     A     S  2.0  2.40    2.55   2.4405     A     S  3.0  1.20    2.05   1.2506     A    TT  4.0  1.50    1.66   1.530我想做的是使用 df2 中的截止值來修改我的原始數據集(df)。我要做的是將df中的所有“標記”值轉換為0或1。目標是創建另外兩個數據幀,一個使用cutoff1作為閾值,一個使用cutoff2作為閾值。例如,對于 cutoff1,由于 AS 配對的截止值為 2.55,我想創建一個新的數據幀,其中標記值 <=2.55 的所有 AS 配對設置為 0,BS 配對的值<=7.06 設置為 0 等,df 中的其他所有內容保持不變。同樣,我想制作第二個數據框,其中完成了相同的操作,但用于 cutoff2 值。我試圖在堆棧溢出中搜索已經完成的模型,我可以適應我的模型,但我似乎只找到了在一個閾值上更改單個列中的所有值的模型(例如這里:最有效的轉換方式Pandas DataFrame 中列的值),而這里有一列有多個截止值,這是基于另外兩列的索引。
查看完整描述

1 回答

?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

您可以分別為每個截止點執行以下操作:


df = df.set_index(['cond', 'Array'])

result = df.merge(df2, on=['cond', 'Array'])

result.loc[result.Marker < result.cutoff1, 'Marker'] = 0

result = result.drop(['cutoff1', 'cutoff2'], axis=1)


print(result)

輸出


   cond Array    X     Y  Marker    Area

0     A     S  1.0  3.10    0.00   3.000

1     A     S  2.0  2.20    0.00   2.000

2     A     S  2.0  2.40    2.55   2.440

3     A     S  3.0  1.20    0.00   1.250

4     A     S  5.1  1.50    3.21   0.156

5     A    TT  3.0  2.10    0.00   2.880

6     A    TT  1.0  1.20    2.01   1.330

7     A    TT  4.0  1.50    0.00   1.530

8     A    TT  7.3  1.33    3.20   1.000

9     B     S  3.2  1.60    0.00   2.000

10    B     S  9.9  0.90    7.06   6.900

11    B     S  3.2  0.78    8.10   9.780

12    B    TT  1.4  1.40    8.01   2.400

13    B    TT  5.5  1.30    9.10   6.300

14    B    TT  1.1  1.20    0.00  10.200

15    B    TT  3.3  4.00    0.00  15.000

16    B    TT  5.4  6.00    0.00  19.000

17    B    SS  1.2  5.00    5.23  16.000

請注意,此示例僅適用于cutoff1.


查看完整回答
反對 回復 2022-06-22
  • 1 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號