[英]How can I sum Pandas Dataframe values in multi-index pivot whether they exist or not?
我有一個用以下代碼創建的數據透視表:
AdminPivot = pd.pivot_table(admindata, index=['Function Name', 'Manager'], values=['Paid Hours'])
+---------------+-----------+------------+
| Function Name | Manager | Paid Hours |
+---------------+-----------+------------+
| Function 1 | Manager 1 | 0.21 |
| Function 2 | Manager 2 | 0.73 |
| Function 3 | Manager 1 | 2.335 |
| | Manager 3 | 0.51 |
| | Manager 4 | 1.4 |
| | Manager 5 | 0.796 |
| | Manager 6 | 0.48 |
| | Manager 7 | 12 |
| Function 4 | Manager2 | 0.15 |
| Function 6 | Manager 1 | 0.87 |
| | Manager 3 | 0.31 |
+---------------+-----------+------------+
我想將每個職能的一部分經理的帶薪小時總數加起來。 那就是說我有興趣得到這個:
Sum of Function 1 Total Paid Hours if managers is (Manager 5, 6, 7)
Sum of Function 2 Total Paid Hours if managers in (Manager 2, 6, 7)
Sum of Function 3 Total Paid Hours if managers in (Manager 1, 3, 6, 7)
我可以輕松地索引樞軸以獲取任何特定經理的價值:
AdminPivot.loc[('Function 1', 'Manager 1'), 'Paid Hours']
隨后,人們可以重復這些值,並使用if語句從本質上對管理器進行硬編碼。 但是,必須有一個更優雅的方法。
具體來說,如何遍歷給定的這些:
我正在嘗試找到一種不錯的方法來對此進行迭代,而不必為每個函數和每個管理器都重新創建loc
語句並添加它們-使用if
語句來確定是否存在。 任何幫助表示贊賞!
獲取所有必需組合的列表,使您可以創建所有ID:
l = [('Function 1', ['Manager 5', 'Manager 6', 'Manager 7']),
('Function 2', ['Manager 2', 'Manager 6', 'Manager 7']),
('Function 3', ['Manager 1', 'Manager 3', 'Manager 6', 'Manager 7'])]
ids = [(x, z) for x,y in l for z in y]
然后,您可以.reindex
+ .sum
df.reindex(ids).sum(level=0)
Paid Hours
Function Name
Function 1 0.000
Function 2 0.730
Function 3 15.325
.reindex
的輸出將是以下內容,僅包括所需的行,並用無數據的NaN
填充,隨后在.sum
其忽略。
Paid Hours
Function Name Manager
Function 1 Manager 5 NaN
Manager 6 NaN
Manager 7 NaN
Function 2 Manager 2 0.730
Manager 6 NaN
Manager 7 NaN
Function 3 Manager 1 2.335
Manager 3 0.510
Manager 6 0.480
Manager 7 12.000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.