簡體   English   中英

如何計算某一組內的組合?

[英]How to count combinations within a certain group?

我有人在某些日期記錄某些項目時間的數據。 所以我的表格看起來像這樣:

ProjectID Date   memberID hours
project1  01.05  a        2
project1  01.05  b        5
project2  05.05  a        1
project2  05.05  b        2
project2  05.05  c        3
project3  07.06  a        4
project3  07.06  b        1
project3  07.06  c        2

等等

我現在想要做的是計算每個項目,對於該項目的項目成員的每個組合,他們在過去共同工作了多少時間。 如果他們都在一起工作,那么應該計算最少的小時數。 例如,如果成員1在項目上工作1小時而成員2工作2小時,那么它應該只計算1小時,因為第二個小時,他們不能一起工作。

例如

ProjectID Date   memberID1 memberID2 hoursworkedtogether
project1   01.05  a         b         0
project2   05.05  a         b         2
project2   05.05  a         c         0
project2   05.05  b         c         0
project3   07.06  a         b         3
project3   07.06  b         c         2
project3   07.06  a         c         1

我已經嘗試使用數據透視表進行聚合,但這不起作用,因為兩個項目成員將始終位於原始數據中的不同行中,並且數據透視圖不會計算它看起來在同一行中的值組合。

一種方法是在所有項目上編寫一個簡單的循環和循環,但我覺得應該有一個更有效的選項,因為表非常大。

我不確定,如果這是最快的解決方案,但是帶有列表pandas.apply()必須有點快...... ;-)

ProjectIDDate數據進行分組,並使用itertools.combinations()創建每個項目的所有用戶組合。

import pandas as pd
df = pd.DataFrame([['project1', '01.05', 'a', 2],
        ['project1', '01.05', 'b', 5],
        ['project2', '05.05', 'a', 1],
        ['project2', '05.05', 'b', 2],
        ['project2', '05.05', 'c', 3],
        ['project3', '07.06', 'a', 4],
        ['project3', '07.06', 'b', 1],
        ['project3', '07.06', 'c', 2]],
        columns=['ProjectID', 'Date', 'memberID', 'hours'])
from itertools import combinations
def calc_member_hours(project):
    data = [(x[0], 
             x[1], 
             *min(project['hours'][project['memberID']==x[0]].values,project['hours'][project['memberID']==x[1]].values)) 
                for x in list(combinations(project['memberID'],2))]
    df = pd.DataFrame(data, columns=['memberID1', 'memberID2', 'hoursworkedtogether'])
    return df

result_df = df.groupby(['ProjectID', 'Date']).apply(calc_member_hours)
result_df

在此輸入圖像描述

暫無
暫無

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

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