Как подсчитать количество вхождений указанного значения c для разных уникальных идентификаторов в Pandas? - PullRequest
0 голосов
/ 05 марта 2020

У меня большой набор данных из более чем 10000 записей. Набор данных содержит уникальный идентификатор, год, когда произошло событие, и размер этого события. Я хочу посчитать количество событий выше и ниже заданного порогового значения c для каждого уникального идентификатора. Тем не менее, для событий ниже порогового значения я хочу подсчитать событие, только если оно произошло после определенного года.

В качестве примера, скажем, у меня есть следующие данные:

Unique ID, Year, Size  
111, 1980, 1  
111, 1992, 2  
111, 2000, 4  
222, 1990, 5  
222, 1994, 3  
333, 1999, 2  
333, 2011, 5  
333, 2012, 2  
333, 2016, 1 

Я хочу классифицировать, сколько событий равны или превышают размер 3 для каждого уникального идентификатора. Но я также хочу подсчитывать события, которые <= 3, если они произошли после определенного c года. Например, я хочу только подсчитать события, которые произошли после 1980 года для уникального идентификатора 1, после 1992 года для уникального идентификатора 2 и после 2000 года для уникального идентификатора 3. </p>

На основании приведенных выше данных примера я ожидал бы следующий результат

Уникальный идентификатор, <= 3,> 3

111, 1, 1    
222, 1, 1  
333, 2, 1 

1 Ответ

1 голос
/ 05 марта 2020

Поскольку существует для каждого Unique ID разного порогового года, создайте dictionary для Series.map, поэтому возможен фильтр, здесь Series.lt для меньшего метода с boolean indexing:

d = {111:1980, 222:1992, 333:2000}
df = df[df['Unique ID'].map(d).lt(df['Year'])]
print (df)
   Unique ID  Year  Size
1        111  1992     2
2        111  2000     4
4        222  1994     3
6        333  2011     5
7        333  2012     2
8        333  2016     1

А затем для подсчета используется crosstab с numpy.where:

df = pd.crosstab(df['Unique ID'], np.where(df['Size'].le(3), '<=3','>3'))
print (df)
col_0      <=3  >3
Unique ID         
111          1   1
222          1   0
333          2   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...