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

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

如何在具有檢查條件的數據幀中添加額外的列?

如何在具有檢查條件的數據幀中添加額外的列?

達令說 2022-08-11 17:41:20
我有將數據幀分成兩行的問題。我有以下兩個數據幀:df1 = pd.DataFrame({'Item':['A','B','C'],'Value':[4,3,7]})df2 = pd.DataFrame({'Item':['A','B','C'],'Value':[4,3,2]})df1:    Item    Value0      A        41      B        32      C        7df2:    Item    Value0      A        41      B        32      C        2我想為該值設置一個限制,假設限制 = 10limit = 10之后,我想添加一個額外的列并檢查項目是否在限制范圍內,如果沒有,我想將其分成兩行并顯示以下結果:但是,如果它在限制范圍內,我想添加一行以顯示限制還剩下多少數量:df1:    Item    Value   within_limit0      A        4            Yes1      B        3            Yes2      C        3            Yes3      C        4             Nodf2:    Item    Value   within_limit0      A        4            Yes1      B        3            Yes2      C        2            Yes3    Nan        1          Extra如何獲得上述結果?
查看完整描述

1 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

這是您的函數,這假設索引是范圍索引:


def check_limit(df, limit):

    s = df['Value'].cumsum()

    df['within_limit'] = np.where(s.le(limit), 'Yes', 'No')


    # Nothing off limit

    if s.iloc[-1] < limit:

        return df.append(pd.Series([np.nan, limit-s.iloc[-1],'Extra'], 

                                  index=df.columns,

                                  name=len(df))

                      )


    # all sum even to limit

    if s.iloc[-1] == limit: return df


    # find where the limit is exceeded

    idx = s.gt(limit).idxmax()

    # exceed limit

    exceed_limit = s.loc[idx] - limit


    new_df = df.loc[[idx,idx]].copy()

    new_df['Value'] = [df.loc[idx,'Value'] - exceed_limit, exceed_limit]

    new_df['within_limit'] = ['Yes','No']


    return pd.concat((df.drop(idx), new_df)).sort_index().reset_index(drop=True)


# test data

df1 = pd.DataFrame({'Item':['A','B','C', 'D'],'Value':[4,3,7,2]})

df2 = pd.DataFrame({'Item':['A','B','C'],'Value':[4,3,2]})

輸出:


# check_limit(df1, 10)

  Item  Value within_limit

0    A      4          Yes

1    B      3          Yes

2    C      3          Yes

3    C      4           No

4    D      2           No


# check_limit(df2, 10)

  Item  Value within_limit

0    A      4          Yes

1    B      3          Yes

2    C      2          Yes

3  NaN      1        Extra


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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