每个数据框列值的 Pandas COUNTIF

我有这个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  year

48299       1YR

48752       1YR

48865       1YR

48299       3YR

49503       1YR

48299       5YR

49697       1YR

50267       1YR

50714       1YR

50714       3YR

51050       1YR

使用pandas.cut函数,但我认为这不是解决此问题的正确方法。任何朝着正确方向的帮助将不胜感激。


杨__羊羊
浏览 382回答 1
1回答

慕斯王

利用cumcount与反map利用词典:d = {0:'1YR', 1:'3YR', 2: '5YR'}df['new'] = df.groupby(['company_id']).cumcount().map(d)print (df)    company_id year  new0        48299  1YR  1YR1        48752  1YR  1YR2        48865  1YR  1YR3        48299  3YR  3YR4        49503  1YR  1YR5        48299  5YR  5YR6        49697  1YR  1YR7        50267  1YR  1YR8        50714  1YR  1YR9        50714  3YR  3YR10       51050  1YR  1YR
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python