Как создать столбцы из списка столбцов в кадре данных? - PullRequest
1 голос
/ 04 мая 2020

У меня есть такой фрейм данных:

  Date       ID     Age      Gender        Fruits
  1.1.19     1      50         F            Apple
  2.1.19     1      50         F            Mango
  2.1.19     1      50         F            Orange
  1.1.19     2      75         M            Grapes
  4.1.19     3      20         M            Apple
  4.1.19     3      20         M            Grapes

например, у меня есть два списка:

fruits_list = ['Apple', 'Mango', 'Orange', 'Grapes', 'Banana', 'Guava']
date_list = ['1.1.19', '2.1.19', '3.1.19', '4.1.19', '5.1.19', '6.1.19']

Я хочу преобразовать столбец Fruit в дополнительные столбцы, которые дают двоичную информацию yes / нет для каждого человека. И пропущенная дата должна быть NaN. с помощью этого

pd.get_dummies(df, columns=['Fruits'], prefix='', prefix_sep='').groupby('Date').max()

я получу это, но мне нужны все элементы, которые есть в fruit_list и date_list

Date          ID     Age      Gender        Apple    Mango      Orange    Grapes 
1.1.19         1      50         F            1        0           0         0
1.1.19         2      75         M            0        0           0         1
2.1.19         1      50         F            0        1           1         0 
3.1.19         NaN    NaN        NaN          NaN     NaN        NaN       NaN
4.1.19         3      20         M            1        0           0         1

Желаемый вывод будет таким:

Date             ID     Age      Gender        Apple    Mango      Orange    Grapes    Banana   Guava   sum
    1.1.19         1      50         F            1        0           0         0     0        0       1 
    1.1.19         2      75         M            0        0           0         1     0        0       1
    2.1.19         1      50         F            0        1           1         0     0        0       2
    3.1.19         NaN    NaN        NaN          0        0           0         0     0        0       0
    4.1.19         3      20         M            1        0           0         1     0        0       2
    5.1.19         NaN    NaN        NaN          0        0           0         0     0        0       0
    6.1.19         NaN    NaN        NaN          0        0           0         0     0        0        0

1 Ответ

3 голосов
/ 04 мая 2020

Сначала необходимо указать дату и время в столбцах date_list и Date, чтобы избежать пропущенных значений, затем используйте DataFrame.reindex, чтобы добавить не существует. Дата и столбцы:

df1 = (pd.get_dummies(df, columns=['Fruits'], prefix='', prefix_sep='')
         .groupby('Date')
         .max()
         .reindex(index=date_list, columns=fruits_list, fill_value=0)
         .assign(sum = lambda x: x.sum(axis=1)))
print (df1)

        Apple  Mango  Orange  Grapes  Banana  Guava  sum
Date                                                    
1.1.19      1      0       0       1       0      0    2
2.1.19      0      1       1       0       0      0    2
3.1.19      0      0       0       0       0      0    0
4.1.19      1      0       0       1       0      0    2
5.1.19      0      0       0       0       0      0    0
6.1.19      0      0       0       0       0      0    0

Затем добавить исходные столбцы на DataFrame.merge и изменить порядок столбцов на reindex:

cols = ['Date','ID','Age','Gender'] + fruits_list
df = df1.reset_index().merge(df, on='Date', how='left').reindex(cols, axis=1)
print (df)
     Date   ID   Age Gender  Apple  Mango  Orange  Grapes  Banana  Guava
0  1.1.19  1.0  50.0      F      1      0       0       1       0      0
1  1.1.19  2.0  75.0      M      1      0       0       1       0      0
2  2.1.19  1.0  50.0      F      0      1       1       0       0      0
3  2.1.19  1.0  50.0      F      0      1       1       0       0      0
4  3.1.19  NaN   NaN    NaN      0      0       0       0       0      0
5  4.1.19  3.0  20.0      M      1      0       0       1       0      0
6  4.1.19  3.0  20.0      M      1      0       0       1       0      0
7  5.1.19  NaN   NaN    NaN      0      0       0       0       0      0
8  6.1.19  NaN   NaN    NaN      0      0       0       0       0      0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...