【发布时间】:2019-06-05 03:19:26
【问题描述】:
我对 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。谁能引导我朝着正确的方向前进?
谢谢。
【问题讨论】:
-
最有可能是列名问题。在某些时候您说
input1列是ID和Datetime,在其他时候您将它们用作WD: Employee ID和Server Date/Time。一旦保持一致,您的代码就会生成预期的数据帧。 -
这是我在转置/混淆数据时的拼写错误。感谢您指出。