Pandas создает идеальные данные панели, добавляя пустые строки на основе условий

В принципе, дисперсия применяется, когда CLR может гарантировать, что ей не нужно делать какие-либо репрезентативные изменения к значениям. Все ссылки одинаковы, поэтому вы можете использовать IEnumerable как IEnumerable без каких-либо изменений в представлении; сам собственный код не обязательно должен знать, что вы делаете со значениями, если инфраструктура гарантировала, что он определенно будет действительным.

Для типов значений, которые не work - для обработки IEnumerable как IEnumerable, код, использующий последовательность, должен был бы знать, следует ли выполнять преобразование бокса или нет.

Возможно, вы захотите прочитать блог Эрика Липперта пост по представлению и идентичности для более подробной информации по этой теме в целом.

EDIT: перечитав блог в блоге Эрика, это как минимум примерно тождество как представление, хотя эти два связаны. В частности:

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

blockquote>

1
задан hexi 13 July 2018 в 10:42
поделиться

2 ответа

1
ответ дан jezrael 17 August 2018 в 13:07
поделиться

jezrael всегда быстрее, но я пытаюсь изучить панды здесь, поэтому вот моя попытка;)

Я использую метод передискретизации: вы хотите заполнить пробелы путем перестановки данных к интервалу годового запуска («AS»)

Сначала преобразуйте столбец «Год» в pandas datetime и установите его как index

df.Year = pd.to_datetime(df.Year, format="%Y")
df = df.set_index('Year')

. Затем я обрабатываю каждый уникальный идентификатор отдельно и создаю новый выход DataFrame

IDs = df.ID.unique()
newDf = pd.DataFrame()

Цикл обработки

for ID in IDs:
    # resample to annual start (although end would also be OK)
    temp = df[df.ID==ID].resample('AS').sum()
    # fill in the blanks, now 0, with the wanted data
    temp[temp.ID==0] = pd.DataFrame({'ID':ID, 'Data1':'', 'Data2':''},
        index=temp[temp.ID==0].index)
    # concat this new data with the output frame
    newDf = pd.concat([newDf, temp])

Наконец, очистите вывод, удалив индекс и преобразовывая дату-время обратно в строку

newDf = newDf.reset_index()
newDf.Year = newDf.Year.dt.strftime('%Y')

Результат:

    Year   ID Data1 Data2
0   2010  345     3     2
1   2011  345     1     4
2   2012  345     5     2
3   2013  345     3     1
4   2014  345     3     1
5   2015  345     3     1
6   2016  345     3     1
7   2010  123     1     1
8   2011  123            
9   2012  123     0     2
10  2013  123            
11  2014  123            
12  2015  123            
13  2016  123     0     2
0
ответ дан JHBonarius 17 August 2018 в 13:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: