从Numpy Array获取Pandas Dataframe列名

我有一个从excel导入的数据框:

>>df Name Emp ID Total Salary ABCDE 0 Mike A001 25000 5000 15000 3000 0 2000 1 John A002 23000 5000 10000 3000 3000 2000 2 Bob A003 21000 5000 15000 0 1000 0 3 Rose A004 20000 5000 10000 2000 1000 20000 4 James A005 10000 5000 0 3000 0 2000 

现在我已经使用下面的代码计算了Total Salary子集的总和:

码:

 import pandas as pd import numpy as np df = pd.read_excel('tmp/test.xlsx') val = df.drop(['Name','Emp ID','Total Salary'],1) test = np.array(val) num = df['Total Salary'][0] array = test[0] def subsetsum(array,num): if num == 0 or num < 1: return None elif len(array) == 0: return None else: if np.isclose(array[0],num): return [array[0]] else: with_v = subsetsum(array[1:],(num - array[0])) if with_v: return [array[0]] + with_v else: return subsetsum(array[1:],num) print('\nValues : ',array) print('\nTotal Salary : ',num) print('\nValues of Salary : ',subsetsum(array,num)) 

输出:

 Values : [ 5000 15000 3000 0 2000] Total Salary : 25000 Values of Salary : [5000, 15000, 3000, 0, 2000] 

现在我需要一种方法将数组中存在的工资值链接到数据框中存在的列名。

所以我想我的输出是:

需要输出:

 Values : [ 5000 15000 3000 0 2000] Total Salary : 25000 Values of Salary : A - 5000 B - 15000 C - 3000 E - 2000 

我会build议重写你的子subsetsum函数来返回所选元素的索引 ,而不是元素本身(或者如果这样做对你更好,它可能会返回)。 例如,

 subsetsum([5000, 15000, 3000, 0, 2000], 25000) 

会返回[0, 1, 2, 3, 4] ,或者可能返回[0, 1, 2, 4] 。 然后,您可以使用这些索引来访问相应的列标签以及元素。

随着所有提供的信息,我检查在我自己的机器上。 将data.frame转换为numpy数组最简单的方法是:

 test = val.values array = test[0] 

您始终可以访问列名称

 col = val.columns.values 

最后,将名称与值相匹配

 link = list(zip(col, subsetsum(array,num))) print(link) # Output [('A', 5000), ('B', 15000), ('C', 3000), ('D', 0), ('E', 2000)] 

zip()将匹配2个长度相同的数组,并返回一个zip object 。 那么如果你想迭代和使用打印,首先转换为list() 。 我希望这有帮助!