Как извлечь диапазоны с заданной длиной c из строки данных в python? - PullRequest
2 голосов
/ 20 января 2020

Вот первые 10 столбцов моего фрейма данных:

import pandas as pd

df = pd.DataFrame({
    '0': [373.60],
    '1': [442.83],
    '2': [259.21],
    '3': [293.05],
    '4': [332.79],
    '5': [360.03],
    '6': [676.55],
    '7': [481.67],
    '8': [486.59],
    '9': [561.65],
    '10': [491.75]})

И так далее, фактически мой df содержит 100000 столбцов. Минимальное значение равно 109,59, максимальное значение равно 1703,35.

Я хочу разделить df на заданные диапазоны c длиной 3,98, а затем определить диапазон, содержащий максимальное количество значений. Я имею в виду, что диапазоны должны быть такими:

# converting df to array
df_array = np.array(df)

# defining ranges like:
range_length=3.98
range_1 = df_array.min() + range_length
range_2 = range_1 + range_lenght
...
range_n = df_array.max() - range_n-1

А потом я вижу, что в некотором range_150 содержится около 1200 значений, что является наиболее частым диапазоном распределения, который мне нужен.

И вот я Мне нужно определить индекс каждого значения из этого диапазона в моем DF ..

На самом деле не имеет ни малейшего представления, как это сделать. Похоже, нужно создать несколько функций. Может кто-нибудь помочь, пожалуйста?

1 Ответ

5 голосов
/ 20 января 2020

Таким образом, вы получаете количество записей для каждого диапазона:

ranges = np.arange(df.T.min()[0]-5,df.T.max()[0]+5,3.98) #added +5 to max and -5 to min to surely include them in the range
df_count = df.T.groupby(pd.cut(df.T[0], ranges)).count()
df_count

                  0
0                  
(254.21, 258.19]  0
(258.19, 262.17]  1
(262.17, 266.15]  0
(266.15, 270.13]  0
(270.13, 274.11]  0
              ..
(660.17, 664.15]  0
(664.15, 668.13]  0
(668.13, 672.11]  0
(672.11, 676.09]  0
(676.09, 680.07]  1
[107 rows x 1 columns]

Таким образом, вы можете получить индекс (диапазон) с большинством хитов:

df_count.idxmax()

0    (258.19, 262.17]
dtype: object

Вы можете получить записи, которые находятся в этом диапазоне, как это:

df.T[df.T[0].between(258.19, 262.17)]

        0
2  259.21

Может быть, это помогает.

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