Панды подсчитывают количество экземпляров в столбце и в группе из другого столбца - PullRequest
1 голос
/ 04 октября 2019

Я хочу выполнить запрос на моем Dataframe с пандами, чтобы подсчитать, сколько раз 0 находится в столбце «Дни», а не в NULL в столбце «SUPPLY_CNT», И в групповом столбце «id».

Example Dataframe

   ID   |  Days | SUPPLY_CNT |
-----------------------------|
| 1561  |  -11  |     15     |
| 1561  |    0  |     05     |
| 1561  |   44  |     11     |
| 1561  |    0  |            |
| 1561  |    0  |     24     |
| 1561  |   56  |     24     |
| 1561  |    0  |     19     |
| 1561  |   92  |     21     |
| 2412  |  -789 |     09     |
| 2412  |  -456 |     09     |
| 2412  |  -321 |     31     |
| 2412  |    0  |            |
| 2412  |   99  |     32     |
| 2412  |    0  |     14     |
| 2412  |    0  |     18     |
| 7848  |   451 |     11     |
| 7848  |   3222|     21     |
| 7848  |    0  |     12     |
------------------------------

Expected Output:

1561     3
2412     2
7848     1

У меня есть этот запрос, но нужно сгруппировать 'id'

(df.loc[(df['Days'] == 0) & (df['PAY_DAY_SUPPLY_CNT'].notnull())])
R Equivalent:

  filter(Days==0 & !is.na(PAY_DAY_SUPPLY_CNT))%>%
  group_by(id)%>%
  count(Days)%>%
  arrange(desc(n))

Ответы [ 3 ]

1 голос
/ 04 октября 2019

Создать маску для теста 0 значений и не пропустить и преобразовать в integer s:

m = ((df['Days'] == 0) & df['SUPPLY_CNT'].notna()).astype(int)

И для совокупного подсчета sum:

df1 = m.groupby(df['ID']).sum().reset_index(name='count')
print (df1)

     ID  count
0  1561      3
1  2412      2
2  7848      1

Для Series:

s = m.groupby(df['ID']).sum()
print (s)
ID
1561    3
2412    2
7848    1
dtype: int32
0 голосов
/ 04 октября 2019

Я думаю, это поможет вам.

df[df['Days']==0].groupby('ID')[['Days']].count().rename(columns = {"Days": "Count"})
0 голосов
/ 04 октября 2019

Здесь мы сначала берем строки, в которых значение Days равно 0, а SUPPLY_CNT - это число. Затем мы делаем групповой на этом.

df.loc[(df['Days'] == 0) & ((df['SUPPLY_CNT'].notna()))].groupby('ID')['Days'].count()

Выход

ID
1561    3
2412    2
7848    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...