Pandas - Создание нового информационного кадра с датой в виде одного файла и деталями персонала в другом файле - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть датафрейм со списком всех дат в месяце каландра.

У меня есть еще один фрейм данных, в котором ежедневно присутствует персонал.Я пытаюсь создать новый Dataframe, который объединит оба этих Dataframe.

Ниже приведено, как выглядит df1:

date
10/1/2018
10/2/2018
10/3/2018

df2 выглядит следующим образом:

date,emp_id
10/1/2018,staff_1
10/1/2018,staff_2
10/1/2018,staff_3
10/2/2018,staff_1
10/2/2018,staff_2
10/3/2018,staff_3

Я пытаюсь объединить два вышеупомянутых кадра данных так, чтобы выводкак показано ниже:

,10/1/2018,10/2/2018,10/3/2018
staff_1,1,1,1
staff_2,1,1,0
staff_3,1,0,1

Может кто-нибудь посоветовать, как я могу создать этот окончательный Dataframe с учетом данных, спасибо.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Вы можете использовать pd.pivot_table :

In [2209]: df = df1.merge(df2)

In [2205]: pd.pivot_table(df, index='emp_id', columns='date', aggfunc=len, fill_value=0)
Out[2205]: 
date     10/1/2018  10/2/2018  10/3/2018
emp_id                                  
staff_1          1          1          0
staff_2          1          1          0
staff_3          1          0          1
0 голосов
/ 10 декабря 2018

Я считаю, что вам нужно merge с внутренним соединением по умолчанию, а затем crosstab, если необходимо подсчитать значения:

df = df1.merge(df2)
print (df)
        date   emp_id
0  10/1/2018  staff_1
1  10/1/2018  staff_2
2  10/1/2018  staff_3
3  10/2/2018  staff_1
4  10/2/2018  staff_2
5  10/3/2018  staff_3
6  10/2/2018  staff_2
7  10/3/2018  staff_3

df['date'] = pd.to_datetime(df['date'])

df1 = pd.crosstab(df['emp_id'], df['date'])
print (df1)
date     2018-10-01  2018-10-02  2018-10-03
emp_id                                     
staff_1           1           1           0
staff_2           1           2           0
staff_3           1           0           2

Или get_dummies с max для столбцов индикатора:

df2 = pd.get_dummies(df.set_index('emp_id')['date']).max(level=0)
print (df2)
         2018-10-01  2018-10-02  2018-10-03
emp_id                                     
staff_1           1           1           0
staff_2           1           1           0
staff_3           1           0           1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...