在Pandas中扩展每日花名册以加入其他文件

2024-06-16 10:04:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力创建一个高效的花名册,以便在任何给定的日期跟踪人员和他们所在的团队、他们向谁报告等。我想象输入一个新的一行的人有任何变化。你知道吗

我的挑战是,如何证明该人员在更改之间的所有其他日期都有相同的信息?例如,如果我要用另一个包含每日数据的文件pd.merge这个文件,我想显示这个人a1每天从5/1-5/9Tim报告,然后在5/10以后向John报告。你知道吗

Effective_Date  EmpID   Manager Team    Current
      5/1/2015  a1       Tim    11       No
      5/10/2015 a1       John   5        Yes
      5/1/2015  a2       Steve  11       No
      5/3/2015  a3       Steve  1        No
      5/25/2015 a2       Steve  3        Yes
      5/4/2015  a3       Tim    9        Yes

因此,如果我有一个从5/1-10/1开始的日期列表,我希望看到每个EmpID都有一行对应于每个日期。你知道吗

Date    EmpID   Manager Team    Current
5/1/2015    a1  Tim 11  No
5/2/2015    a1  Tim 11  No
5/3/2015    a1  Tim 11  No
5/4/2015    a1  Tim 11  No
5/5/2015    a1  Tim 11  No
5/6/2015    a1  Tim 11  No
5/7/2015    a1  Tim 11  No
5/8/2015    a1  Tim 11  No
5/9/2015    a1  Tim 11  No
5/10/2015   a1  John    5   Yes
5/11/2015   a1  John    5   Yes
5/12/2015   a1  John    5   Yes
5/13/2015   a1  John    5   Yes
5/14/2015   a1  John    5   Yes
5/15/2015   a1  John    5   Yes

Tags: 文件noa2date人员a1报告manager
1条回答
网友
1楼 · 发布于 2024-06-16 10:04:53

首先我给每个小组加了一行,因为经理今天很活跃。你知道吗

您可以^{}by EmpID^{}by days并通过方法how=first填充行。你知道吗

然后我重置多索引-首先删除第一个重复级别,然后再次重置。你知道吗

print df
  Effective_Date EmpID Manager  Team Current
0     2015-05-01    a1     Tim    11      No
1     2015-05-10    a1    John     5     Yes
2     2015-05-01    a2   Steve    11      No
3     2015-05-03    a3   Steve     1      No
4     2015-05-25    a2   Steve     3     Yes
5     2015-05-04    a3     Tim     9     Yes
import datetime as dt

lastRowIndex = df.groupby('EmpID').Effective_Date.idxmax()
rows = df.ix[lastRowIndex]
rows['Effective_Date'] = pd.to_datetime(dt.date.today())
df = pd.concat([df,rows], ignore_index=True)
df = df.sort_values(['EmpID', 'Effective_Date'], ascending=True)
print df

  Effective_Date EmpID Manager  Team Current
0     2015-05-01    a1     Tim    11      No
1     2015-05-10    a1    John     5     Yes
6     2015-11-28    a1    John     5     Yes
2     2015-05-01    a2   Steve    11      No
4     2015-05-25    a2   Steve     3     Yes
7     2015-11-28    a2   Steve     3     Yes
3     2015-05-03    a3   Steve     1      No
5     2015-05-04    a3     Tim     9     Yes
8     2015-11-28    a3     Tim     9     Yes
df = df.groupby(['EmpID']).apply(lambda x: x.set_index('Effective_Date').resample('D', how='first',fill_method='ffill'))
df = df.reset_index(level=0, drop=True).reset_index()
print df.head(20)
  Effective_Date EmpID Manager  Team Current
0      2015-05-01    a1     Tim    11      No
1      2015-05-02    a1     Tim    11      No
2      2015-05-03    a1     Tim    11      No
3      2015-05-04    a1     Tim    11      No
4      2015-05-05    a1     Tim    11      No
5      2015-05-06    a1     Tim    11      No
6      2015-05-07    a1     Tim    11      No
7      2015-05-08    a1     Tim    11      No
8      2015-05-09    a1     Tim    11      No
9      2015-05-10    a1    John     5     Yes
10     2015-05-11    a1    John     5     Yes
11     2015-05-12    a1    John     5     Yes
12     2015-05-13    a1    John     5     Yes
13     2015-05-14    a1    John     5     Yes
14     2015-05-15    a1    John     5     Yes
15     2015-05-16    a1    John     5     Yes
16     2015-05-17    a1    John     5     Yes
17     2015-05-18    a1    John     5     Yes
18     2015-05-19    a1    John     5     Yes
19     2015-05-20    a1    John     5     Yes

相关问题 更多 >