GOOGLE ADS

понедельник, 11 апреля 2022 г.

Как отображать пустые значения в столбце в кросс-таблице pandas Dataframe?

Я использовал библиотеку pandas и кросс-таблицу для создания частотного фрейма данных для работы с данными. В следующем коде я читаю в csv, создаю кадр данных, а затем создаю кросс-таблицу, которая представляет собой кадр данных частоты. Затем я получаю поперечное сечение данных для извлечения столбцов и данных под ними.

def dataforgraphs():
d = readcsv()
df = DataFrame(d)
d1=df[1]
d0=df[0]
d2=df[2]
d3=df[3]
d4=df[4]
cta = pd.crosstab(d0,[d2,d1,d3],rownames=['Date'],colnames=['RigStat','Prov','Obj'], margins=False)
ndfABA= ndf.xs('AB', level='Prov', axis=1)
ABrigs = ndfAB.xs(['BIT','GAS','OIL'],axis=1)

Теперь у меня возникла проблема с тем, что я не могу получить поперечное сечение гипотетического столбца, которое включало бы все пустые значения, не имеющие метки «БИТ», «ГАЗ» или «НЕФТЬ». В сводной таблице Excel я могу сделать это, отметив (пустое) поле при выборе столбцов, которые будут включены в сводную таблицу. Я хочу сделать то же самое здесь, чтобы получить подсчет частоты всех пустых.

Какие-либо предложения?

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

 OIL GAS BIT
Date
01-01-2007 1 6 3
01-02-2007 2 4 4
01-03-2007 1 6 3
01-04-2007 5 6 4
01-05-2007 1 7 3
01-06-2007 6 6 6
01-07-2007 1 8 3
01-08-2007 5 6 6
01-09-2007 1 6 3
01-10-2007 1 7 3

Вместо этого я хотел бы получить следующее, которое включает столбец для всех пустых значений, не перечисленных как НЕФТЬ, ГАЗ или БИТ (или перечисленных как что-либо в этом отношении).

 OIL GAS BIT "blank'
Date
01-01-2007 1 6 3 10
01-02-2007 2 4 4 11
01-03-2007 1 6 3 12
01-04-2007 5 6 4 10
01-05-2007 1 7 3 1
01-06-2007 6 6 6 4
01-07-2007 1 8 3 5
01-08-2007 5 6 6 2
01-09-2007 1 6 3 5
01-10-2007 1 7 3 2

Данные, поступающие в кадр данных кросс-таблицы pandas, структурированы следующим образом:

Date Obj Operator Type Address
01-01-2007 OIL ABC HZ 112 W Ave
01-01-2007 GAS ABC HZ 112 W Ave
01-01-2007 GAS ABV HZ 113 W Ave
01-01-2007 BIT NCH HZ 114 W Ave
01-01-2007 CNR HZ 115 W Ave
01-02-2007 OIL CNRL HZ 112 W Ave
01-02-2007 OIL CNRL HZ 112 W Ave
01-02-2007 OIL CNRL HZ 112 W Ave
01-03-2007 CNRL HZ 112 W Ave
01-03-2007 CNRL HZ 112 W Ave

Отсюда кросс-таблица pandas создаст частотную таблицу, которая будет фиксировать частоту НЕФТИ, ГАЗ, БИТ по дате, но я не могу найти, как получить количество пустых значений. Обратите внимание, что есть некоторые столбцы, в которых нет списка Obj. Это значения, которые не зафиксированы в перекрестной таблице, которые я хотел бы иметь возможность запрашивать.

Какие-либо предложения?


Решение проблемы

Одна из возможностей — заполнить значения NaN нужной строкой (например, «пусто»), чтобы они также учитывались:

In [23]: df
Out[23]:
Date Obj Operator Type Address
0 01-01-2007 OIL ABC HZ 112 W Ave
1 01-01-2007 GAS ABC HZ 112 W Ave
2 01-01-2007 GAS ABV HZ 113 W Ave
3 01-01-2007 BIT NCH HZ 114 W Ave
4 01-01-2007 NaN CNR HZ 115 W Ave
5 01-02-2007 OIL CNRL HZ 112 W Ave
6 01-02-2007 OIL CNRL HZ 112 W Ave
7 01-02-2007 OIL CNRL HZ 112 W Ave
8 01-03-2007 NaN CNRL HZ 112 W Ave
9 01-03-2007 NaN CNRL HZ 112 W Ave
In [24]: pd.crosstab(df['Date'], df['Obj'])
Out[24]:
Obj BIT GAS OIL
Date
01-01-2007 1 2 1
01-02-2007 0 0 3
In [25]: df2 = df.fillna('blank')
In [26]: pd.crosstab(df2['Date'], df2['Obj'])
Out[26]:
Obj BIT GAS OIL blank
Date
01-01-2007 1 2 1 1
01-02-2007 0 0 3 0
01-03-2007 0 0 0 2

То, что на самом деле делает перекрестная таблица, - это просто группировка по значениям строки и столбца (чтобы стать индексами строки и столбца), которые вы указали, и подсчет частоты этого.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...