Найти специальную позицию в пандах Python - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть DataFrame, например:

 student_id     date     project_id
 1              1/1/18   15
 1              1/1/18   17
 1              2/2/18   16 
 1              3/3/18   15 
 1              3/3/18   12 
 2              2/3/18   3
 2              4/3/18   4
 2              5/3/18   6 
 2              5/3/18   4 

Я хочу найти идентификатор студента с двумя первыми проектами, которые они сделали, и последними, которые они сделали с датой,

student_id    project_id1st    date1st     project_id2nd      date2nd projectlast    datelast
1             15               1/1/18      17                 1/1/18  12               3/3/18
2             3                2/3/18      4                  4/3/18  4                5/3/18

1 Ответ

0 голосов
/ 28 сентября 2018

Использование:

print (df)
    student_id     date  project_id
0            1   1/1/18          15
1            1   1/1/18          17
2            1   2/2/18          16
3            1   3/3/18          15
4            1   3/3/18          12
5            2   2/3/18           3
6            2   4/3/18           4
7            2   5/3/18           6
8            2   5/3/18           4
9            3   7/3/18           7
10           3   8/3/18           8
11           4   9/3/18           2

#create datetimes
df['date'] = pd.to_datetime(df['date'])

#get last values onl if length > 3
def f(x):
    if (len(x) < 3):
        return x.head(2).assign(g=range(len(x)))
    else:
        return x.iloc[[0,1, -1]].assign(g=range(3))

df = df.groupby('student_id', group_keys=False).apply(f)

#create MultiIndex and reshape
df = df.set_index(['student_id','g']).unstack().sort_index(axis=1, level=1)
#flatten MultiIndex and set last 2 columns differently
df.columns = [f'{i}{j+1}' for i, j in df.columns[:-2]] + ['datelast','projectlast']
#create column from index
df = df.reset_index()

print (df)
   student_id      date1  project_id1      date2  project_id2   datelast  \
0           1 2018-01-01         15.0 2018-01-01         17.0 2018-03-03   
1           2 2018-02-03          3.0 2018-04-03          4.0 2018-05-03   
2           3 2018-07-03          7.0 2018-08-03          8.0        NaT   
3           4 2018-09-03          2.0        NaT          NaN        NaT   

   projectlast  
0         12.0  
1          4.0  
2          NaN  
3          NaN  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...