Условно вставлять строки в панды DataFrame

Вот проблема, я вытащить CSV в кадр данных Pandas, который выглядит так:

Identity    Date       value1    value2    Random
Apple       1/1/2005   10        10        Orange
Apple       12/1/2005  1         1         Orange

Затем мне нужно вызвать Identity Apple, найти ее минимальную и максимальную даты и вставить строки, т.е. месяцы, чтобы выполнить интерполяцию между двумя точками, чтобы получить конечный результат

Identity    Date       value1    value2    Random
Apple       1/1/2005   10        10        Orange
Apple       2/1/2005   0         0         Orange
Apple       3/1/2005   0         0         Orange
 .              .      .         .         .
 .              .      .         .         .
 .              .      .         .         .
Apple       12/1/2005  1         1         Orange

Проблема в том, что, хотя я могу просмотреть список идентификаторов и связать все строки, я не могу найти способ вставить дополнительные строки, особенно без неприятного цикла for. по сути, мне нужно преодолеть разрыв в дате и заполнить соответствующие значения Identity нулями.

list = ['Apple','Banana','Orange']    
for i in range(0,len(list))
    data.loc[data['Identity'].isin(list[i])]

РЕДАКТИРОВАТЬ:

Рабочий код ниже:

import pandas as pd

df = pd.DataFrame([['Apple',pd.to_datetime('1/1/2005'),10,10,'Orange'],    ['Orange', pd.to_datetime('8/1/2005'),1, 1 ,'Apple'],['Apple',         pd.to_datetime('12/1/2005'),1, 1 ,'Orange']])
df.columns = ['Identity','Date', 'value1' , 'value2','Random']

full_df = pd.DataFrame()
dummydata = []

indentity = ['Apple','Orange']
random = ['Orange','Apple']
years = ['2005','2005']

for i in range(0,2):
    full_df = pd.DataFrame()
    full_df['Date'] = [pd.to_datetime(str(x)+'/1/'+str(years[i])) for x in   range(1,13)]
    full_df['Identity'] = indentity[i]
    full_df['Random'] = random[i]
    dummydata.append(full_df)

full_df = pd.concat(dummydata)                     
result =  full_df.merge(df,how='left').fillna(0)
#print(dummydata)
#print(full_df)
print(result )

1 ответ

Решение

Мое предложение - создать полный теоретический DF, объединить с данными и заполнить:

import pandas as pd

df = pd.DataFrame([['Apple',pd.to_datetime('1/1/2005'),10,10,'Orange'],['Apple', pd.to_datetime('12/1/2005'),1, 1 ,'Orange']])
df.columns = ['Identity','Date', 'value1' , 'value2','Random']

full_df = pd.DataFrame()
full_df['Date'] = [pd.to_datetime(str(x)+'/1/2005') for x in range(1,13)]
full_df['Identity'] = 'Apple'

result =  full_df.merge(df,how='left').fillna(0)
result

Это хорошо для одного идентификатора и года, циклически изменяя годы и идентификаторы, добавляя все созданные DF в список и pd.concat(list)

Другие вопросы по тегам