如何在python中从数据帧行提取具有特定长度的范围?

2024-06-28 14:52:51 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我的数据帧的前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划分为长度为3.98的特定范围,然后定义一个包含最大值的ragne。 我的意思是,范围必须如下所示:

# 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

然后我看到一些范围_150包含大约1200个值,这是我需要的最常见的分布范围

我需要在df中定义该范围内每个值的索引

我真的不知道怎么做。看起来需要创建几个函数。有人能帮忙吗


Tags: to数据importdataframepandasdf定义as
1条回答
网友
1楼 · 发布于 2024-06-28 14:52:51

这样,您可以获得每个范围的条目数:

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

也许有帮助

相关问题 更多 >