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

每个数据框列值的 Pandas COUNTIF

每个数据框列值的 Pandas COUNTIF

杨__羊羊 2021-07-22 18:15:22
我有这个excel公式:=IF(L2="","",IF(COUNTIF($L$1:L2,L2)=1,"1YR",IF(COUNTIF($L$1:L2,L2)=2,"3YR","5YR")))正在用熊猫翻译成软件。这countif是一个棘手的问题,因为如果当前单元格中的值出现在当前单元格中,则只需要检查和计数当前单元格上方的前一个单元格。目前的解决方案:df['year'] = np.where(df['company_id'] is None, None,                np.where(pd.cut(df['company_id'], df.loc[df['company_id']].index[0]).count() == 1, '1YR',               np.where(pd.cut(df.company_id, df.loc[df['company_id']].index[0]).count() == 2, '3YR', '5YR')))所需的输出:company_id  year48299       1YR48752       1YR48865       1YR48299       3YR49503       1YR48299       5YR49697       1YR50267       1YR50714       1YR50714       3YR51050       1YR使用pandas.cut函数,但我认为这不是解决此问题的正确方法。任何朝着正确方向的帮助将不胜感激。
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

利用cumcount与反map利用词典:


d = {0:'1YR', 1:'3YR', 2: '5YR'}

df['new'] = df.groupby(['company_id']).cumcount().map(d)

print (df)

    company_id year  new

0        48299  1YR  1YR

1        48752  1YR  1YR

2        48865  1YR  1YR

3        48299  3YR  3YR

4        49503  1YR  1YR

5        48299  5YR  5YR

6        49697  1YR  1YR

7        50267  1YR  1YR

8        50714  1YR  1YR

9        50714  3YR  3YR

10       51050  1YR  1YR


查看完整回答
反对 回复 2021-07-28
  • 1 回答
  • 0 关注
  • 347 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信