簡體   English   中英

從Numpy數組中獲取Pandas Dataframe列名稱

[英]Get Pandas Dataframe Column names from Numpy Array

我有一個從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

我建議重寫您的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()將匹配兩個具有相同長度的數組,並返回一個zip object 然后,如果要迭代並使用print,請首先轉換為list() 希望對您有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM