我有这个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
添加回答
举报
0/150
提交
取消