【问题标题】:Get Pandas Dataframe Column names from Numpy Array从 Numpy 数组中获取 Pandas 数据框列名
【发布时间】:2017-05-12 10:46:51
【问题描述】:

我有一个从 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

现在我使用以下代码计算了 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

【问题讨论】:

    标签: python excel pandas numpy


    【解决方案1】:

    我建议重写您的 subsetsum 函数以返回所选元素的索引,而不是元素本身(或者如果这对您更好,它可能会同时返回两者)。例如,

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

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

    【讨论】:

    • 我已经尝试过但失败了,请您指导我如何做。请..这将是一个很大的帮助!
    • @cgmaster 你试过什么,为什么失败了?
    • 我无法从函数中提取索引值。当我尝试单独提取值以便获取索引时,它会抛出 None [2000] [3000, 2000] [15000, 3000, 2000]。
    • @cgmaster 老实说,这对我没有帮助。我不确定“从函数中提取索引值”是什么意思。
    【解决方案2】:

    使用您提供的所有信息,我会在自己的机器上进行检查。 将 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() 将匹配两个长度相同的数组,并返回一个zip object。然后如果你想迭代和使用打印,首先转换为list()。我希望这有帮助!

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2022-12-17
      • 2019-02-08
      相关资源
      最近更新 更多