Панды: создавать строки для каждого уникального значения столбца, даже с отсутствующими данными - PullRequest
0 голосов
/ 27 июня 2018

Примечание : у меня были трудности с формулировкой названия моего вопроса, поэтому, если вы можете придумать что-то лучшее, чтобы помочь другим людям с подобным вопросом, пожалуйста, дайте мне знать, и я изменю его.

Текущие данные

Хранится в виде фрейма данных Pandas

print(df)

week | site | vol
1    | a    | 10
2    | a    | 11
3    | a    | 2
1    | b    | 55
2    | b    | 1
1    | c    | 69
2    | c    | 66
3    | c    | 23

Обратите внимание, что на сайте b нет данных за неделю 3

Цель

week | site | vol
1    | a    | 10
2    | a    | 11
3    | a    | 2
1    | b    | 55
2    | b    | 1
3    | b    | 0
1    | c    | 69
2    | c    | 66
3    | c    | 23

По сути, я хочу создать строки для всех уникальных комбинаций week и site. Если исходные данные не имеют vol для комбо week-site, тогда они получают 0.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вы можете использовать crosstab и stack:

pd.crosstab(df.site,df.week,df.vol, aggfunc='first').fillna(0).stack().reset_index(name='vol')

Выход:

  site  week   vol
0    a     1  10.0
1    a     2  11.0
2    a     3   2.0
3    b     1  55.0
4    b     2   1.0
5    b     3   0.0
6    c     1  69.0
7    c     2  66.0
8    c     3  23.0
0 голосов
/ 27 июня 2018

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

df.set_index(['week','site']).unstack('week',fill_value=0).stack().reset_index()
Out[424]: 
  site  week  vol
0    a     1   10
1    a     2   11
2    a     3    2
3    b     1   55
4    b     2    1
5    b     3    0
6    c     1   69
7    c     2   66
8    c     3   23
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...