簡體   English   中英

然后通過使用多個列合並Pandas Group

[英]Pandas Group By then Merge Using Multiple Columns

我是Pandas的新手,但我試圖分析員工時間戳的數據集,以確定每周唯一的每日時間戳的總和。

我的初始數據幀(input1)看起來像這樣(但更長):

            ID          Datetime        Week/Year
0          15.0    2019-02-04 08:28:44   6/2019
1          15.0    2019-02-04 12:48:05   6/2019
2          15.0    2019-02-04 12:54:29   6/2019
3          15.0    2019-02-05 08:05:51   6/2019
4          15.0    2019-02-05 12:47:26   6/2019
5          15.0    2019-02-05 14:45:34   6/2019
6          15.0    2019-02-06 08:10:59   6/2019
7          15.0    2019-02-06 12:49:24   6/2019
8          15.0    2019-02-06 13:02:48   6/2019
9          15.0    2019-02-07 08:02:22   6/2019
10         15.0    2019-02-08 08:02:10   6/2019
11         15.0    2019-02-08 09:55:22   6/2019

我創建了另一個數據框:

df = pd.DataFrame({'Timestamp':  input1['Datetime'], 'ID': input1['ID'], 'Week/Year': input1['Week/Year'],'MDY':input1['Server Date/Time'].apply(lambda x: "%d/%d/%d" % (x.month, x.day, x.year))})

然后,我按周,員工分組,並獲得每天的唯一計數(MDY):

df_grouped = df.groupby(['Week/Year', 'ID']).MDY.nunique()

Week/Year   ID    MDY 
6/2019      15.0   5

我想要的最終結果是通過加入Week和ID將MDY總和合並回初始數據幀-我嘗試了幾種不同的方法:

input1.merge(df_grouped.to_frame(), left_on=['ID','Week/Year'], right_index=True)

得到類似的東西:

           ID          Datetime        Week/Year    MDY
0          15.0    2019-02-04 08:28:44   6/2019    5
1          15.0    2019-02-04 12:48:05   6/2019    5
2          15.0    2019-02-04 12:54:29   6/2019    5
3          15.0    2019-02-05 08:05:51   6/2019    5
4          15.0    2019-02-05 12:47:26   6/2019    5
5          15.0    2019-02-05 14:45:34   6/2019    5

加入之后,我最終得到了NaN的全面支持。 有人能夠引導我朝正確的方向前進嗎?

謝謝。

這個groupby

df_grouped = df.groupby(['Week/Year', 'WD: Employee ID']).MDY.nunique()

應該返回一個序列,其索引為Week/Year WD: Employee ID

Week/Year   WD: Employee ID
6/2019      15.0   5
Name: MDY , dtype: int64

但是,您將其索引顯示為Week/Year ID 您可以檢查列名以確保其匹配。

接下來,在此

input1.merge(df_grouped.to_frame(), left_on=['ID','Week/Year'], right_index=True)

假設df_grouped索引如示例中所示,即Week/Year ID ,則對right_index left_on順序錯誤。 它應該是

input1.merge(df_grouped.to_frame(), left_on=['Week/Year', 'ID'], right_index=True)

暫無
暫無

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

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