PANDAS COUNTIF на значение столбца данных - PullRequest
0 голосов
/ 24 октября 2018

У меня есть формула 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, но я не думаю, что это правильный путь для этого.Буду очень признателен за любую помощь в правильном направлении.

1 Ответ

0 голосов
/ 24 октября 2018

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...