从Numpy Array获取Pandas Dataframe列名

时间:2016-12-28 07:16:40

标签: python excel pandas numpy

我有从excel导入的数据框:

>>df

    Name Emp ID  Total Salary     A      B     C     D      E
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

现在我使用以下代码计算了总薪资的子集总和:

代码:

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

2 个答案:

答案 0 :(得分:1)

我建议重写你的subsetsum函数来返回所选元素的 indices ,而不是元素本身(或者它可以返回两者,如果这样可以更好为了你)。例如,

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

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

答案 1 :(得分:1)

使用您提供的所有信息,我在自己的机器上查看。 将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。然后,如果要迭代并使用print,请先转换为list()。我希望这有帮助!