これが私のデータフレームの最初の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の長さの特定の範囲にスライスしてから、最大量の値を含むラグネを定義したいと思います。つまり、範囲は次のようになっている必要があります。
# 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のその範囲から各値のインデックスを定義する必要があります。
本当にそれを行う方法についてのアイデアはありません。いくつかの関数を作成する必要があるようです。誰か助けてもらえますか?
このように、各範囲のエントリ数を取得します。
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
多分それは役立ちます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加