潘达斯:如何在一个范围之间找到值的索引?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了潘达斯:如何在一个范围之间找到值的索引?相关的知识,希望对你有一定的参考价值。

我有一个pandas数据框,在 "Num "列中有一系列的数字。

import pandas as pd

numbers = np.array([10,15,60,45,37,28])
df = pd.DataFrame(numbers, columns= ['Num'])

我想找到所有满足条件的索引值的组合,那么136.5就是70%。

numbers1+numbers2+... >= 70% of df['Num'].sum()

df['Num'].sum() = 195所以136. 5是70%。一些值的组合可能是: ,所以136.5是70%。

10+15+60 
15+60 
60+45+37
10+15+60+45+37+28 

以此类推 我将把这些索引组合,最后,得到超过70%的组合,其中索引数最少。

答案

你可以使用 itertools 这里。

import pandas as pd
import itertools
import numpy as np

numbers = np.array([10,15,60,45,37,28])
df = pd.DataFrame(numbers, columns= ['Num'])
total = int(df.sum())
list_n = list(df['Num'])
for L in range(0, len(list_n)+1):
    for subset in itertools.combinations(list_n, L):
        if sum(subset) > 0.7 * total:
            print(subset)

(60, 45, 37)
(10, 60, 45, 37)
(10, 60, 45, 28)
(15, 60, 45, 37)
(15, 60, 45, 28)
(15, 60, 37, 28)
(60, 45, 37, 28)
(10, 15, 60, 45, 37)
(10, 15, 60, 45, 28)
(10, 15, 60, 37, 28)
(10, 60, 45, 37, 28)
(15, 60, 45, 37, 28)
(10, 15, 60, 45, 37, 28)

当然,你可以完全跳过熊猫。

import itertools
import numpy as np

numbers = np.array([10,15,60,45,37,28])
total = sum(numbers)
for L in range(0, len(numbers)+1):
    for subset in itertools.combinations(numbers, L):
        if sum(subset) > 0.7 * total:
            print(subset)

(60, 45, 37)
(10, 60, 45, 37)
(10, 60, 45, 28)
(15, 60, 45, 37)
(15, 60, 45, 28)
(15, 60, 37, 28)
(60, 45, 37, 28)
(10, 15, 60, 45, 37)
(10, 15, 60, 45, 28)
(10, 15, 60, 37, 28)
(10, 60, 45, 37, 28)
(15, 60, 45, 37, 28)
(10, 15, 60, 45, 37, 28)

以上是关于潘达斯:如何在一个范围之间找到值的索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写一个函数来找到具有最低值的索引

如何找到给定范围内除以给定数字时具有一定余数的值的数量?

在特定元素上查找排序数组的范围索引

在 Python 中,如何找到排序列表中第一个大于阈值的值的索引?

如何创建一个新的 pandas 列,该列是索引范围中每个值的列表,不包括行值

在 Python 中,如何找到不是某个值的列表中第一项的索引?