У меня есть датафрейм:

            keyword     val
    0   nt              0.93
    1   atm             0.94
    2   bank            1.00
    3   long            1.02
    4   number          1.11
    5   get             2.20
    6   money           3.50
    7   account         3.80
    8   deposit         3.90
    9   card            5.00
    10  credit          0.8
    11  debit           1.23

Я хочу узнать количество ключевых слов на единицу диапазона значений, т.е. от 0,9-1 => [nt, atm] => 2 от 1-1,1 => [bank, long, number] => 3 и т. Д.

0
Rasika 31 Май 2019 в 08:27

2 ответа

Лучший ответ

Попробуйте использовать groupby с некоторыми изменениями значения столбца, затем используйте count в столбце 'keyword':

>>> df.groupby(df['val'].astype(int))['keyword'].count()
val
0    3
1    4
2    1
3    3
4    1
Name: keyword, dtype: int64

< Сильный > Edit:

>>> df.groupby(df['val'].apply("{:.1f}".format))['keyword'].count()
val
0.8    1
0.9    2
1.0    2
1.1    1
1.2    1
2.2    1
3.5    1
3.8    1
3.9    1
5.0    1
Name: keyword, dtype: int64

Если округление ума (1.9 не будет в той же группе, что и 1.1):

>>> df.groupby(df['val'].round(1))['keyword'].count()
val
0.8    1
0.9    2
1.0    2
1.1    1
1.2    1
2.2    1
3.5    1
3.8    1
3.9    1
5.0    1
Name: keyword, dtype: int64
1
U10-Forward 31 Май 2019 в 05:41

Используйте pd.cut() здесь с groupby() :

bins=[0,1,2,3,5]

df.groupby(pd.cut(df.val,bins)).keyword.apply(list)

val
(0, 1]                    [nt, atm, bank]
(1, 2]                     [long, number]
(2, 3]                              [get]
(3, 5]    [money, account, deposit, card]

Для подсчета использовать:

df.groupby(pd.cut(df.val,bins)).keyword.size()

val
(0, 1]    3
(1, 2]    2
(2, 3]    1
(3, 5]    4

Вы можете настроить свои контейнеры, как:

bins=[0,0.99,1,1.99,2,2.99,3,3.99,4,4.99,5]
df.groupby(pd.cut(df.val,bins)).keyword.size()

val
(0.0, 0.99]    2
(0.99, 1.0]    1
(1.0, 1.99]    2
(1.99, 2.0]    0
(2.0, 2.99]    1
(2.99, 3.0]    0
(3.0, 3.99]    3
(3.99, 4.0]    0
(4.0, 4.99]    0
(4.99, 5.0]    1
1
anky_91 31 Май 2019 в 05:44