我有这个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
函数,但我认为这不是解决此问题的正确方法。朝正确方向的任何帮助将不胜感激。 最佳答案
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