为了账号安全,请及时绑定邮箱和手机立即绑定

如何在具有检查条件的数据帧中添加额外的列?

如何在具有检查条件的数据帧中添加额外的列?

达令说 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 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号